Junit是Java單元測試框架,一般Eclipse里面會集成這個Junit4測試工具
既然是測試工具,雖然開發用得比較多,但作為測試人員也需要具備會Junit測試的思想,況且技多不壓身
這里簡單介紹下用法:
1、在eclipse中創建一個junit4Test工程
點擊“File” -> “New” -> “Java Project”,出現如下界面,填寫工程名稱junit4Test:
點擊Next或者Finish,即創建好了junit4Test工程
2、創建com.junit4Test包
右鍵“junit4Test”工程名稱,選擇“New” -> “Package”,即得到包的配置界面如下:
填寫包名,然后點擊Finish即創建了junit4TestPackage包
3、創建被測試類和方法
這里我們用簡單的加法來做被測試對象
右擊包名“junit4TestPackage” -> “New” -> “Class”,出現下面的配置界面:
配置好類名稱,然后點擊“Finish”即創建了類,然后在類里面寫一個加法的方法:
package com.junit4Test; public class Add { public int addTest(int x,int y){ return x + y; } }
4、創建測試包
創建方法和上面的創建包一樣,取個名字“junit4AddTest”
5、創建測試類
右鍵測試包名“com.junit4AddTest” -> “New” -> “JUnit Test Case”,如果你沒有導入Junit的jar包,那你需要先導入下,右擊工程名稱“junit4Test”,選擇“Properties”或者選擇“Build Path” -> “Configure Build Path” ,出現如下配置界面:
按照上面步驟配置即可。然后按照開始說的,就會出現如下配置界面:
寫好測試類名稱,選擇好需要的方法(如無需要可以不選擇)和需要測試的類(因為不在一個包里面,這里填寫的是包名+類名),然后點擊“Next”:
勾選被測試方法addTest,然后選擇“Finish”,這時候就創建好了用例:
這時候看到的是一個空的測試方法,我們需要調用被測試方法並做斷言,上面右側紅框中應該是如下代碼:
package com.junit4AddTest; import static org.junit.Assert.*; import com.junit4Test.*; import org.junit.Test; public class AddTest { @Test public void testAddTest() { int z = new Add().addTest(1,2); assertEquals(3,z); } }
這時候就可以執行測試類了,右擊測試用例可以看到,原來是執行java程序,現在變成了執行junit Test:
執行結果如下:
執行結果是Runs:1/1(總共一個用例,執行了一個用例),Errors:0(沒有錯誤),Failures:0(沒有失敗)
如果我們把斷言值改成:assertEquals(2,z);,則結果如下:
把斷言改了之后,左側顯示Failures:1(失敗一個用例),用例也顯示為,左側下面也給出了Trace。
我們在測試類中復制一個testAddTest方法,一個錯誤的一個成功的:
package com.junit4AddTest; import static org.junit.Assert.*; import com.junit4Test.*; import org.junit.Test; public class AddTest { @Test public void testAddTest() { int z = new Add().addTest(1,2); assertEquals(2,z); } @Test public void testAddTest1() { int z = new Add().addTest(2,2); assertEquals(4,z); } }
我們再執行下看看結果如下:
失敗的依然是標記失敗
------------------------------------------------------------------華麗的分割線------------------------------------------------------------------
補充說明下Junit 的幾種注解(和python中的裝飾器類似):
1.@Test: 測試方法
a)(expected=XXException.class)如果程序的異常和XXException.class一樣,則測試通過
b)(timeout=100)如果程序的執行能在100毫秒之內完成,則測試通過
2.@Ignore: 被忽略的測試方法:加上之后,暫時不運行此段代碼(JUnit5中使用@Disabled代替)
3.@Before: 每一個測試方法之前運行(Junit5中使用@BeforeEach)
4.@After: 每一個測試方法之后運行(Junit5中使用@BeforeEach)
5.@BeforeClass: 方法必須必須要是靜態方法(static 聲明),所有測試開始之前運行,注意區分@before,是所有測試方法(Junit5中使用@BeforeAll)
6.@AfterClass: 方法必須要是靜態方法(static 聲明),所有測試結束之后運行,注意區分 @After(Junit5中使用@AfterAll)
7.@Parameters:表示該方法是個參數化測試(Junit5中使用@ParameterizedTest)
需要導入如下:
import org.junit.Test; import org.junit.Ignore; import org.junit.Before; import org.junit.After; import org.junit.BeforeClass; import org.junit.AfterClass;
如果在創建JUnit case的時候,勾選了相關項,則在case里面就會自動生成(下圖紅色框):
setUpBeforeClass對應BeforeClass
setUp對應Before
tearDownAfterClass對應AfterClass
tearDown對應After
這個有點類似python中unittest框架中的setUp和tearDown,包括里面的斷言。使用過的小伙伴應該一看就懂
另外Junit框架和python中unittest框架類似的是測試套件(testsuite)這個概念,下面講解下套件如何使用
我們在原來加法基礎上再增加一個被測類(減法),如下:
package com.junit4Test; public class Minus { public int Minus(int x,int y){ return x - y; } }
則被測包中有倆個被測類:
在測試類中響應增加減法的測試類:
package com.junit4AddTest; import static org.junit.Assert.*; import org.junit.Test; import com.junit4Test.*; public class MinusTest { @Test public void test() { int z = new Minus().Minus(5,2); assertEquals(3,z); } }
這樣,我們就有倆個類三個測試用例:
我們在測試類的包里面增加一個套件類,來統一管理測試類:
測試套件代碼如下:
package com.junit4AddTest; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({AddTest.class,MinusTest.class}) public class AllTestCase { /* * 這里不需要寫任何東西 * 把需要的測試類填寫到上面SuiteClasses中即可 */ }
這樣便於測試類的管理~