優點 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
s
indexOf(
developer
) >
|| s
indexOf(
Works
) >
);
非常的不方便而且需要額外代碼
JUnit 會默認自動提供一些可讀的描述信息如清單 所示
清單 JUnit 默認提供一些可讀的描述性錯誤信息
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!
優點 開發人員可以通過實現 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 的使用例子
[] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/Java/ky/201311/29098.html