优点 assertThat 不再像 assertEquals 那样使用比较难懂的谓宾主语法模式(如assertEquals( x))相反assertThat 使用了类似于主谓宾的易读语法模式(如assertThat(xis()))使得代码更加直观易读
优点 可以将这些 Matcher 匹配符联合起来灵活使用达到更多目的如清单 所示
清单 Matcher 匹配符联合使用
// 联合匹配符not和equalTo表示
不等于
assertThat( something not( equalTo( developer ) ) );
// 联合匹配符not和containsString表示不包含子字符串
assertThat( something not( containsString( Works ) ) );
// 联合匹配符anyOf和containsString表示包含任何一个子字符串
assertThat(something anyOf(containsString(developer) containsString(Works)));
优点 错误信息更加易懂可读且具有描述性(descriptive)
JUnit 以前的版本默认出错后不会抛出额外提示信息如
assertTrue( s
indexOf(
developer
) >
|| s
indexOf(
Works
) >
);
如果该断言出错只会抛出无用的错误信息如junitframeworkAssertionFailedErrornull
如果想在出错时想打印出一些有用的提示信息必须得程序员另外手动写如
assertTrue(
Expected a string containing
developer
or
Works
sindexOf(developer) > || sindexOf(Works) > );
非常的不方便而且需要额外代码
JUnit 会默认自动提供一些可读的描述信息如清单 所示
清单 JUnit 默认提供一些可读的描述性错误信息
String s =
hello world!
;
assertThat( s anyOf( containsString(developer) containsString(Works) ) );
// 如果出错后系统会自动抛出以下提示信息
javalangAssertionError:
Expected: (a string containing developer or a string containing Works)
got: hello world!
优点 开发人员可以通过实现 Matcher 接口定制自己想要的匹配符当开发人员发现自己的某些测试代码在不同的测试中重复出现经常被使用这时用户就可以自定义匹配符将这些代码绑定在一个断言语句中从而可以达到减少重复代码并且更加易读的目的
如何使用 assertThat
JUnit 自带了一些 Hamcrest 的匹配符 Matcher但是只有有限的几个在类 orghamcrestCoreMatchers 中定义要想使用他们必须导入包 orghamcrestCoreMatchers*
如果想使用一些其他更多的匹配符 Matcher可以从 Hamcrest 网页下载 hamcrestlibraryjar 和 hamcrestcorejar并将其加入到工程库中所有的匹配符都在类 orghamcrestMatchers 中定义要想使用必须得在代码中 import static orghamcrestMatchers*如果使用外部的匹配符最好就不要再使用 JUnit 自带的匹配符了因为这样容易导致匹配符 Matcher 重复定义编译可能会出错(ambiguous for the type) JUnit 允许使用 Hamcrest 来使用更多的匹配符这还是 JUnit 第一次允许在自己的工程中使用第三方类
注意
assertThat 仍然是断言语句所以要想使用必须还得 import static orgjunitAssert*
虽然 assertThat 可以代替以前所有的断言语句但是以前的所有 assert 语句仍然可以继续使用清单 列举了大部分 assertThat 的使用例子
[] [] [] [] [] [] [] []