junit.framework包下的Assert提供了多個斷言方法. 主用于比較測試傳遞進去的兩個參數(shù).Assert斷言的使用比較簡單撵颊,主要有以下函數(shù):
Assert.assertEquals([String message],T expected,T actual)
比較兩個參數(shù)是否相等丢间,message是可選的消息颈将,假如加入了該參數(shù),則發(fā)生錯誤時會報告該消息饥脑。如果 expected,actual,返回true恳邀。否則調(diào)用 expected.equals(actual)來判斷。
Assert.assertNotEquals([String message],T expected,T actual)
比較兩個參數(shù)是否不相等灶轰,message是可選的消息谣沸,假如加入了該參數(shù),則發(fā)生錯誤時會報告該消息笋颤。
Assert.assertSame([String message],T expected,T actual)
以expected==actual運算的結(jié)果來判斷乳附。
expected.equals(actual) 和 expected==actual 的差別在于。如果expected沒有重寫java.lang.Object的equals方法椰弊,那么就是兩個java對象的內(nèi)存地址比較许溅,比較結(jié)果和 expected==actual的結(jié)果相同瓤鼻。如果expected重寫了equals方法(比如GregorianCalendar秉版,BigDecimal類),那么比較的結(jié)果不一定和expected==actual的結(jié)果相同茬祷。
Assert.assertNotSame([String message],T expected,T actual)
以expected != actual運算的結(jié)果來判斷清焕。如果expected沒有重寫java.lang.Object的equals方法,那么就是兩個java對象的內(nèi)存地址比較祭犯,比較結(jié)果和 expected != actual的結(jié)果相同秸妥。如果expected重寫了equals方法(比如GregorianCalendar,BigDecimal類)沃粗,那么比較的結(jié)果不一定和expected !=actual的結(jié)果相同粥惧。
Assert.assertTrue([String message],boolean condition)
如果表達式condition結(jié)果為真,則測試通過最盅,message為可選信息突雪,若有則condition結(jié)果為假時顯示message的內(nèi)容
Assert.assertFalse([String message],boolean condition)
如果表達式condition結(jié)果為假,則測試通過涡贱,message為可選信息咏删,若有則condition結(jié)果為真時顯示message的內(nèi)容
Assert.assertArrayEquals([String message], Object[] expected, Object[] actual)
以最直接的方式比較數(shù)組:如果數(shù)組長度相同,且每個對應(yīng)的元素相同问词,則兩個數(shù)組相等督函,否則不相等。數(shù)組為空的情況也作了考慮。message為可選信息辰狡,若不相等則會打印message锋叨。
Assert.assertNotNull([String message], Object object)
斷言object為空,message為可選信息,若不為空打印message
Assert.assertNotNull([String message], Object object)
斷言object不為空宛篇,message為可選信息悲柱,若為空打印message
Assert.assertThat([String reason],T actual, Matcher matcher)
其中actual為需要測試的變量,matcher為使用Hamcrest的匹配符來表達變量actual期望值的聲明些己;assertThat是Junit 4.4加入的新方法豌鸡,理論上講程序員可以只使用 assertThat 一個斷言語句,結(jié)合 Hamcrest 提供的匹配符段标,就可以表達全部的測試思想涯冠。
核心匹配符
1、assertThat( T actual, allOf( greaterThan(number1), lessThan(numer2) ) )
allOf匹配符表明如果接下來的所有條件必須都成立測試才通過逼庞,相當于“與”(&&)
2蛇更、assertThat( T actual, anyOf( greaterThan(number1), lessThan(number2) ) )
anyOf匹配符表明如果接下來的所有條件只要有一個成立則測試通過,相當于“或”(||)
3赛糟、assertThat( T actual, anything() )
anything匹配符表明無論什么條件派任,永遠為true
4、assertThat( T actual, is(T expected ) )
is匹配符表明如果前面actual等于expected璧南,則測試通過
5掌逛、assertThat( T actual, not( T expected ) )
not匹配符和is匹配符正好相反,表明如果actual不等于expected司倚,則測試通過
6豆混、assertThat(T actual,comparesEqualTo(T expected))
comparesEqualTo表示將actual和expected進行比較,只要在"數(shù)值"上相等即測試通過动知,比如1和1皿伺,"1"和"1"
字符串相關(guān)匹配符
1、assertThat( T actual, containsString( String s ) )
containsString匹配符表明如果測試的字符串a(chǎn)ctual包含子字符串s則測試通過
2盒粮、assertThat( String actual, endsWith( String s ) )
endsWith匹配符表明如果測試的字符串a(chǎn)ctual以子字符串s結(jié)尾則測試通過
3鸵鸥、assertThat( String actual, startsWith( String s ) )
startsWith匹配符表明如果測試的字符串a(chǎn)ctual以子字符串s開始則測試通過
4、assertThat( T actual, equalTo( T excepted ) )
equalTo匹配符表明如果actual等于excepted則測試通過丹皱,equalTo可以測試數(shù)值之間妒穴,字符串之間和對象之間是否相等,相當于Object的equals方法
5种呐、assertThat( String actual, equalToIgnoringCase( String s ) )
equalToIgnoringCase匹配符表明如果actual在忽略大小寫的情況下等于s則測試通過
6宰翅、assertThat( String actual, equalToIgnoringWhiteSpace( String s ) )
equalToIgnoringWhiteSpace匹配符表明如果actual在忽略頭尾的任意個空格的情況下等于s則測試通過,注意:字符串中的空格不能被忽略
數(shù)值相關(guān)匹配符
1爽室、assertThat( T actual, closeTo( Number, precision ) )
closeTo匹配符表明如果所測試的浮點型數(shù)actual在Number±precision范圍之內(nèi)則測試通過
2汁讼、assertThat( T actual, greaterThan(Number) )
greaterThan匹配符表明如果所測試的數(shù)值actual大于Number則測試通過
3淆攻、assertThat( T actual, lessThan (Number) )
lessThan匹配符表明如果所測試的數(shù)值actual小于Number則測試通過
4、assertThat( T actual, greaterThanOrEqualTo (Number) )
greaterThanOrEqualTo匹配符表明如果所測試的數(shù)值actual大于等于Number則測試通過
5嘿架、assertThat( T actual, lessThanOrEqualTo (Number) )
lessThanOrEqualTo匹配符表明如果所測試的數(shù)值actual小于等于Number則測試通過
collection相關(guān)匹配符
1瓶珊、assertThat( mapObject, hasEntry( "key", "value" ) )
hasEntry匹配符表明如果測試的Map對象mapObject含有一個鍵值為"key"對應(yīng)元素值為"value"的Entry項則測試通過
2、assertThat( iterableObject, hasItem ( "element" ) )
hasItem匹配符表明如果測試的迭代對象iterableObject含有元素“element”項則測試通過
3耸彪、assertThat( mapObject, hasKey ( "key" ) )
hasKey匹配符表明如果測試的Map對象mapObject含有鍵值“key”則測試通過
4伞芹、assertThat( mapObject, hasValue ( "key" ) )
hasValue匹配符表明如果測試的Map對象mapObject含有元素值“value”則測試通過