JUnit 4.4 以前的版本默认出错后不会抛出额外提示信息,如:
assertTrue( s.indexOf("developer") > -1 || s.indexOf("Works") > -1 ); |
如果该断言出错,只会抛出无用的错误信息,如:junit.framework.AssertionFailedError:null
。
如果想在出错时想打印出一些有用的提示信息,必须得程序员另外手动写,如:
assertTrue( "Expected a string containing 'developer' or 'Works'", s.indexOf("developer") > -1 || s.indexOf("Works") > -1 ); |
非常的不方便,而且需要额外代码。
JUnit 4.4 会默认自动提供一些可读的描述信息,如清单 4 所示:
清单 4 JUnit 4.4 默认提供一些可读的描述性错误信息
String s = "hello world!"; assertThat( s, anyOf( containsString("developer"), containsString("Works") ) ); // 如果出错后,系统会自动抛出以下提示信息: java.lang.AssertionError: Expected: (a string containing "developer" or a string containing "Works") got: "hello world!" |
如何使用 assertThat
JUnit 4.4 自带了一些 Hamcrest 的匹配符 Matcher,但是只有有限的几个,在类
org.hamcrest.CoreMatchers
中定义,要想使用他们,必须导入包
org.hamcrest.CoreMatchers.*
。
如果想使用一些其他更多的匹配符 Matcher,可以从 Hamcrest 网页下载
hamcrest-library-1.1.jar
和 hamcrest-core-1.1.jar
(请参阅
参考资料),并将其加入到工程库中,所有的匹配符都在类
org.hamcrest.Matchers
中定义,要想使用,必须得在代码中 import static
org.hamcrest.Matchers.*;
。如果使用外部的匹配符,最好就不要再使用 JUnit 4.4
自带的匹配符了,因为这样容易导致匹配符 Matcher 重复定义,编译可能会出错(ambiguous for the type
)。
JUnit 4.4 允许使用 Hamcrest 来使用更多的匹配符,这还是 JUnit 第一次允许在自己的工程中使用第三方类。
注意:
assertThat
仍然是断言语句,所以要想使用,必须还得import static org.junit.Assert.*;
;- 虽然
assertThat
可以代替以前所有的断言语句,但是以前的所有 assert 语句仍然可以继续使用;
文章来源于领测软件测试网 https://www.ltesting.net/