-單元測試框架-Junit

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就是只要條件中只要有一個滿足就能通過,只有兩個都不滿足時才會不通過:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 簡介 測試 在軟件開發(fā)中是一個很重要的方面,良好的測試可以在很大程度決定一個應(yīng)用的命運(yùn)。軟件測試中,主要有3大種類...
    Whyn閱讀 6,000評論 0 2
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 1.初級篇 1.1 單元測試 我們在編寫大型程序的時候,需要寫成千上萬個方法或函數(shù),這些函數(shù)的功能可能很強(qiáng)大,但我...
    流川楓AI閱讀 2,547評論 0 8
  • 我們寫單元測試,一般都會用到一個或多個單元測試框架,在這里,我們介紹一下JUnit4這個測試框架。這是Java界用...
    鄒小創(chuàng)閱讀 5,755評論 3 33
  • 什么是單元測試 在計算機(jī)編程中,單元測試(Unit Testing)又稱為模塊測試, 是針對程序模塊(軟件設(shè)計的最...
    HelloCsl閱讀 11,088評論 1 46

友情鏈接更多精彩內(nèi)容