JUnit4及其在IDEA中的使用

2021-07-24 07:53:08 字數 4489 閱讀 5414

一、環境配置

使用idea ide 進行單元測試,首先需要安裝junit 外掛程式。

1.安裝junit外掛程式步驟

file-->settings-->plguins-->browse repositories-->輸入junit-->選擇junit generator v2.0安裝。

2.使用junit外掛程式

在需要進行單元測試的類中,使用快捷鍵alt+insert,選擇junit test,選擇junit4。

3. 配置生成的test類位置

package test.$entry.packagename; -----可以更改生成的測試類的包名

idea 中自動import 所需包

import

org.junit.test

; import

org.junit.before

; import

org.junit.after

;

在 junit4 中,測試是由 @test 注釋來識別的,測試類使用test做為類名的字尾(非必要),測試方法使用test作為方法名的字首(非必要)。

測試方法必須使用public void 進行修飾,不能帶有任何引數。測試類的包應該與被測試類的包保持一致。

junit4允許我們使用 @before和@after來注釋多個方法(替代junit3的setup() 和teardown() 方法),這些方法在每個測試方法執行前和執行後都要執行一次,完成初始化欄位或準備資料和清除工作。

public class unitaddtest 

@before

public void

before2() throws exception

@after

public void

after() throws exception

/**

* * method: add(int i, int j)

* */

@test

public void

testadd() throws exception

測試結果:

passed

start2:

start:

over!

結果分析:

passed說明沒有錯誤

failure 一般是單元測試使用的斷言方法判斷失敗引起,說明預期結果和程式執行結果不一致。

error 是有**異常引起的,他產生於測試**本身中的bug。

其他常用註解:

1. @beforeclass 和@afterclass

junit4引入了乙個junit3中沒有的新特性——類範圍的 setup() 和teardown() 方法。任何用 @beforeclass 注釋的方法都將在該類中的測試方法執行之前剛好執行一次,而任何用 @afterclass 注釋的方法都將在該類中的所有測試都執行之後剛好執行一次。

@beforeclass所修飾的方法在所有方法載入前執行,而且他是靜態的在類載入後就會執行該方法,在記憶體中只有乙份例項,適合用來載入配置檔案。

@afterclass所修飾的方法在所有方法執行完畢之後執行,通常用來進行資源清理,例如關閉資料庫連線。

所以乙個junit 4 的單元測試用例執行順序為:@beforeclass –> @before –> @test –> @after –> @afterclass;每乙個測試方法的呼叫順序為:@before –> @test –> @after。

注意:

@beforeclass和@afterclass對於所有測試方法只執行一次,而@before和@after是每個測試方法都執行一次。

多個before和after的執行順序是不定的。

@beforeclass和@afterclass必須宣告為public static,所有標識為@afterclass的方法都一定會被執行,即使在標識為@beforeclass的方法丟擲異常的的情況下也一樣會。而@before和@after必須宣告為public 並且非static。所有標識為@after 的方法都一定會被執行,即使在標識為 @before 或者 @test 的方法丟擲異常的的情況下也一樣會。

2.@ignore:忽略的測試方法,標註的含義就是「某些方法尚未完成,暫不參與此次測試」;這樣的話測試結果就會提示你有幾個測試被忽略,而不是失敗。一旦你完成了相應函式,只需要把@ignore標註刪去,就可以進行正常的測試。

3.@test(timeout=毫秒) 允許程式執行的時間。

4.@test(excepted=xx.class) 在執行時忽略某個異常。

5.引數化設定:需要測試的僅僅是測試資料,**結構是不變的,只需要更改測試資料。用法如下:

在單元測試類前註解:@runwith(parameterized.class),然後構造需引數化的構造器。寫個函式用於輸入需要測試的引數和期待結果,並在該函式前面註解@parameters

@runwith(parameterized.class)

public class unitaddtest

@before

public void

before1() throws exception

@before

public void

before2() throws exception

@after

public void

after() throws exception

@parameters

public static collection input(),

});}/**

* method: add(int i, int j)

*/ @test

public void

testadd() throws exception

}

這個例子中故意在第二組資料中寫錯結果,跑程式之後就會顯示第一粗測試通過,第二組失敗,即上面寫道的failed,表示執行結果與期待結果不等。

4 常用的斷言介紹(參考部落格 )

4.1 、assertequals([string message],object target,object result)

target與result不相等,中斷測試方法,輸出message

assertnull   斷言物件為null,若不滿足,方法丟擲帶有相應資訊的assertionfailederror異常。

assertequals(a, b) 測試a是否等於b(a和b是原始型別數值(primitive value)或者必須為實現比較而具有equal方法)

assertequals

斷言兩個物件相等,若不滿足,方法丟擲帶有相應資訊的assertionfailederror異常。

例如計算器加法功能的測試可以使用一下驗證:

assert.assertequals(0,result);

4.2  asserttrue/false([string message],boolean result)

result為 false/true,中斷測試方法,輸出message

asserttrue

斷言條件為真,若不滿足,方法丟擲帶有相應資訊的assertionfailederror異常。

assertfalse(a) 測試a是否為false(假),a是乙個boolean數值。

assertfalse

斷言條件為假,若不滿足,方法丟擲帶有相應資訊的assertionfailederror異常。

4.3  assertnotnull/null([string message],obejct result

retult= = null/result!=null,中斷測試方法,輸出message

assertnotnull(a) 測試a是否非空,a是乙個物件或者null。

assertnotnull 斷言物件不為null,若不滿足,方法丟擲帶有相應資訊的assertionfailederror異常。

4.4  assertsame/notsame(object target,object result)

traget與result 不指向/指向 同一記憶體位址(例項),中斷測試方法,輸出message

assertnotsame(a, b) 測試a和b是否沒有都引用同乙個物件。

assertnotsame

斷言兩個引用指向不同物件,若不滿足,方法丟擲帶有相應資訊的assertionfailederror異常。

assertsame 斷言兩個引用指向同乙個物件,若不滿足,方法丟擲帶有相應資訊assertionfailederror異常。

4.5  fail([string message])

中斷測試方法,輸出message

fail  讓測試失敗,並給出指定資訊。

IDEA中快速使用單元測試 junit4舉例

目錄1.新建乙個測試類stringtest public class stringtest2.在類中編寫測試方法test1public class stringtest public void test1 3.方法上,加 test 註解public class stringtest test pub...

簡單的Junit4應用

如果寫了乙個類,想測試一下有沒有bug,可以用main方法去測試。但是main方法缺點很多,不是理想的做單元測試的途徑 方法不能一起執行,且測試結果多數要通過程式設計師自己觀察才可以判定。為了克服這些缺點,使單元測試更加簡單方便,junit是乙個很好的選擇。接下來,將會講解下junit4的使用。要使...

junit3和junit4的區別

junit3 必須引入junit.framwork.testcase 必須繼承testcase 測試方法必須以test開頭 每個測試方法前自動呼叫setup 方法,結束後呼叫teardown 方法 junit4 必須引入org.junit.test org.junit.assert.不用繼承test...