優(yōu)點 4:可以將這些 Matcher 匹配符聯(lián)合起來靈活使用,達到更多目的。如清單 3 所示:
清單 3 Matcher 匹配符聯(lián)合使用
// 聯(lián)合匹配符not和equalTo表示“不等于”
assertThat( something, not( equalTo( "developer" ) ) );
// 聯(lián)合匹配符not和containsString表示“不包含子字符串”
assertThat( something, not( containsString( "Works" ) ) );
// 聯(lián)合匹配符anyOf和containsString表示“包含任何一個子字符串”
assertThat(something, anyOf(containsString("developer"), containsString("Works")));
優(yōu)點 5:錯誤信息更加易懂、可讀且具有描述性(descriptive)。
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") ) );
// 如果出錯后,系統(tǒng)會自動拋出以下提示信息:
java.lang.AssertionError:
Expected: (a string containing "developer" or a string containing "Works")
got: "hello world!"
優(yōu)點 6:開發(fā)人員可以通過實現(xiàn) Matcher 接口,定制自己想要的匹配符。當開發(fā)人員發(fā)現(xiàn)自己的某些測試代碼在不同的測試中重復出現(xiàn),經(jīng)常被使用,這時用戶可以自定義匹配符,將這些代碼綁定在一個斷言語句中,從而可以達到減少重復代碼并且更加易讀的目的。