一、assertThat
此断言语法的优点包括:更具可读性和可键入性。
JUnit中的部分断言的可读性并不是很好,有时我们不得不自己编写表达式并断言其结果,并且因为我们没有提供失败的信息,当这个断言失败时只会抛出java.lang.AssertionError
,无法知道到底是哪一部分出错。
assertTrue(responseString.contains("color") || responseString.contains("colour"));
// ==> failure message:
// java.lang.AssertionError:
assertThat(responseString, anyOf(containsString("color"), containsString("colour")));
// ==> failure message:
// java.lang.AssertionError:
// Expected: (a string containing "color" or a string containing "colour")
// but: was "responseString字符串"
JUnit4.4
引入了Hamcrest框架,Hamcest提供了一套匹配符Matcher,这些匹配符更接近自然语言,可读性高,更加灵活。并且使用全新的断言语法:assertThat
,结合Hamcest提供的匹配符,只用这一个方法,就可以实现所有的测试。
assertThat
语法如下:
- assertThat(T actual, Matcher matcher);
- assertThat(String reason, T actual, Matcher matcher);
其中reason
为断言失败时的输出信息,actual
为断言的值或对象,matcher
为断言的匹配器,里面的逻辑决定了给定的actual
对象满不满足断言。
JUnit4的匹配器定义在org.hamcrest.CoreMatchers
和 org.junit.matchers.JUnitMatchers
中。通过静态导入的方式引入相应的匹配器,如下:
import static org.hamcrest.CoreMatchers.is;
或者:
import static org.hamcrest.CoreMatchers.*;
二、JUnitMatchers
org.junit.matchers.JUnitMatchers比较器中大部分都被标记为