1.Junit注解
Junit3和junit4的區(qū)別 。 測試:白盒、黑盒測試,黑盒:很多時候都是黑盒,站在用戶角度去使用功能,面向需求的方式,只要測功能怎么使用。
白盒測試:經(jīng)過代碼的方式來測試,測試邏輯、耗時、功能、等,拆開源碼來測試,對里面的功能一個一個測試,一般由開發(fā)人員來測試。
Junit測試在企業(yè)中一般用的少,比較麻煩寫測試用例,小型、中型項目一般【學(xué)Java,到凱哥學(xué)堂kaige123.com】黑盒測試、不測性能,只測試功能、使用。但是大型項目就一定要進(jìn)行白盒測試,全方面測試,性能這些都要測試,耗時之類的都要測試。每個邏輯塊都要測試性能,比如300ms之內(nèi)要完成的,如果超過了,就不標(biāo)準(zhǔn)了。
嚴(yán)格的項目要寫測試用例,每個功能都要寫個測試用例去測試一下。
我們寫邏輯代碼來測試一下:junit測試可以分為很多條線路測試,一個方法就是一條線路,每條線路基本上是不會相關(guān)聯(lián)的。比如你的前面的一條測試線路出錯了,并不會影響到下一條線路的正常進(jìn)行。



如上圖所示,有兩條線路,兩個方法,線路1有異常不會影響線路2大的運(yùn)行。

這是沒有出錯,就不會拋異常。
Junit里面有一個之前調(diào)用和之后調(diào)用@Before和@After,這就是之前調(diào)用和之后調(diào)用。怎么使用這兩個東西?
之前調(diào)用可以用來提前創(chuàng)建需要測試的類的對象、打開相應(yīng)的資源之類的,而之后調(diào)用可以用來銷毀已經(jīng)測試了的類的資源等。

如上圖所示的代碼,就是使用之前調(diào)用和之后調(diào)用。 要注意,不同的線路、方法不要互相調(diào)用,不要讓它們產(chǎn)生互相關(guān)聯(lián),比如你的方法1里面調(diào)用方法2,萬一測試的時候,其中一個方法出錯了,就會影響另一個方法的調(diào)用了。
如果我們有兩個測試類去測試一個邏輯類,我們可以兩個測試類一起調(diào)用運(yùn)行嗎?
可以,要用到組合注解才可以讓兩個類一起運(yùn)行:

上圖是第二個測試類的代碼,我們怎么把兩個測試類組合合并起來一起運(yùn)行呢?
首先,我們先創(chuàng)建一個類,然后使用合并注解@Runwith(Suite.class)@SuiteClasses({TestService.class,TestService2.class}),代碼:

如上圖,我們的兩個測試類都被調(diào)用了??梢砸淮涡园押芏鄠€測試類運(yùn)行起來的組合測試。
另外,上面都是用來測試正確情況的,我們也要測一下出錯的情況,@Test(expected=UserNameException)@Test(expected=PassWordException):

如上圖,我們的兩個方法,在給了錯誤用戶名和錯誤密碼后,成功的把對應(yīng)的異常拋出來了,所以這連個測試用例應(yīng)該是正確的。
expected是專門用來測試異常發(fā)生的,如果賬戶密碼不對,要發(fā)生了才沒有問題。

如上圖所示,就是超時了,所以會報錯,有些程序?qū)Τ绦虻倪\(yùn)行時間也是有要求的,如果你的程序沒有在規(guī)定的時間內(nèi)運(yùn)行完成,說明程序是成功的 。 多方面都要考慮考慮,正確性、異常等、運(yùn)行時間這些都應(yīng)該測試一下。
Assert,無論junit3還是junit4都是有這個東西的。主要是用來判斷邏輯值的。如方法:Assert.assertTrue(邏輯表達(dá)式),如果里面的表達(dá)式是true,則用junit test的時候是通過的,如果表達(dá)式是false,則會拋出異常,如:


結(jié)果如圖,注意這里是failure而不是error,這就是邏輯錯誤了。也有Assert.assertFalse(邏輯表達(dá)式),這里是用來判斷邏輯是不是false的,如果是false則junit test通過,如果是true則是failure了,如:


還有出錯時可以寫一句話的情況,如下:


還有比較數(shù)組是不是一樣的邏輯比較,如下:


其中,這里的數(shù)組類型可以更換為其他類型的,同樣是這種比較方法。
還有不相等比較:

還有判斷不能為空的:

還有比較兩個對象的內(nèi)存地址的:


還有專門用來拋錯誤的fail(),如下:

以后我們驗證代碼的邏輯的時候,我們可以直接使用Assert類里面提供的各種各樣的靜態(tài)方法,就不用自己去寫判斷邏輯是否正確的代碼了。
Junit3的里面的Assert也可以使用的,只要把測試類繼承一下TestCase類就行了。


Hamcrest,這個jar包,也是一個框架,專門用來做邏輯匹配,非常靈活的。
可以聯(lián)合多個條件一起判斷,而assert只能判斷一個條件。具體的使用方法,需要聯(lián)合assertThat(actual,matcher)來進(jìn)行使用。




還有一個allof必須全部都滿足,就是括號里面的條件都滿足才可以,如:



只要里面的endsWith不通過,那整個判斷的結(jié)果就是錯的,就會有failure

還有一個anyOf就是只要條件中只要有一個滿足就能通過,只有兩個都不滿足時才會不通過:

