優(yōu)點(diǎn) 4:可以將這些 Matcher 匹配符聯(lián)合起來(lái)靈活使用,達(dá)到更多目的。如清單 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表示“包含任何一個(gè)子字符串”
assertThat(something, anyOf(containsString("developer"), containsString("Works")));
優(yōu)點(diǎn) 5:錯(cuò)誤信息更加易懂、可讀且具有描述性(descriptive)。
JUnit 4.4 以前的版本默認(rèn)出錯(cuò)后不會(huì)拋出額外提示信息,如:
assertTrue( s.indexOf("developer") > -1 || s.indexOf("Works") > -1 );
如果該斷言出錯(cuò),只會(huì)拋出無(wú)用的錯(cuò)誤信息,如:junit.framework.AssertionFailedError:null.
如果想在出錯(cuò)時(shí)想打印出一些有用的提示信息,必須得程序員另外手動(dòng)寫,如:
assertTrue( "Expected a string containing 'developer' or 'Works'",
s.indexOf("developer") > -1 || s.indexOf("Works") > -1 );
非常的不方便,而且需要額外代碼。
JUnit 4.4 會(huì)默認(rèn)自動(dòng)提供一些可讀的描述信息,如清單 4 所示:
清單 4 JUnit 4.4 默認(rèn)提供一些可讀的描述性錯(cuò)誤信息
String s = "hello world!";
assertThat( s, anyOf( containsString("developer"), containsString("Works") ) );
// 如果出錯(cuò)后,系統(tǒng)會(huì)自動(dòng)拋出以下提示信息:
java.lang.AssertionError:
Expected: (a string containing "developer" or a string containing "Works")
got: "hello world!"
優(yōu)點(diǎn) 6:開發(fā)人員可以通過(guò)實(shí)現(xiàn) Matcher 接口,定制自己想要的匹配符。當(dāng)開發(fā)人員發(fā)現(xiàn)自己的某些測(cè)試代碼在不同的測(cè)試中重復(fù)出現(xiàn),經(jīng)常被使用,這時(shí)用戶可以自定義匹配符,將這些代碼綁定在一個(gè)斷言語(yǔ)句中,從而可以達(dá)到減少重復(fù)代碼并且更加易讀的目的。