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 語句仍然可以繼續使用;
文章來源于領測軟件測試網 http://www.kjueaiud.com/