JUnit是一個回歸測試框架(regression testing framework)。Junit測試是程序員測試,即所謂白盒測試,因為程序員知道被測試的軟件如何(How)完成功能和完成什么樣(What)的功能。Junit是一套框架,繼承TestCase類,就可以用Junit進行自動測試了。
1. 創建項目
其中:
1)com.junit.MyClass用於存放類
2)為了不將測試添加到源中,創建與src平級的目錄:tests,存放測試類。這樣測試將從產品代碼中分離出來。然后Mark Director As:Test Source Root
2. 在com.junit.MyClass中添加新的類用於測試:
Calculator.java
package com.junit.MyClass; /** * Created by lesley on 2017/1/14. */ public class Calculator { public int add(int value1, int value2){ return value1 + value2; } }
3. 添加Calculator的單元測試類
點擊類名,選擇 Go to——test
或者直接:Cmd + Shift + T:
選擇JUnit4作為單元測試庫。IDEA將這個庫添加到模塊中。選擇生成add()方法
當測試類生成以后,我們可以為我們的測試方法CalculatorTest添加方法:
package com.junit.MyClass; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.*; /** * Created by lesley on 2017/1/14. */ public class CalculatorTest { //注意這個不能忘記!!要不然后面無法調用 private Calculator calculator; @Before public void setUp() throws Exception { calculator = new Calculator(); } @Test public void add() throws Exception { assertEquals(calculator.add(3, 5),8); } }
4. 運行測試
點擊 Run CalculatorTest
結果顯示如下:
5. 編輯測試設置
我們可以通過Run ——Edit Configuration或工具欄上的標簽來調整我們測試運行配置:
在Configuration選項卡,用戶可以選擇需要運行的測試。例如,您可以從一個類、程序包、測試套件或甚至模式中運行所有的測試。這里的Fork模式讓用戶在一個單獨的進程運行每個測試。
代碼覆蓋測試:
1)默認情況下使用自己的測試引擎
2)覆蓋率模式:Tracing會增加消耗,但是測試會更准確
6. 運行覆蓋
收集覆蓋率,用戶需要通過Run → Run 'MyClassTest' with Coverage或工具欄上的選項運行特定模式的測試。
當覆蓋模式運行至少一個測試之后,IDE將會在Project工具窗口顯示每個程序包、類的覆蓋率數據,同時在Coverage工具窗和編輯器中也會顯示。
如果用戶添加另一個方法到MyClass,並運行覆蓋率測MyClass,就會發現,沒有被測試覆蓋到的代碼都將高亮顯示為紅色。覆蓋的代碼顏色則是綠色。如果一些代碼是只覆蓋部分,那沒將顯示為黃色。
7. 批量操作
我們寫兩個測試類:一個是剛剛寫的Calculator.java,還有一個為User.java:
package com.junit.MyClass; /** * Created by lesley on 2017/1/14. */ public class User { public String getName(){ return ("sbw"); } }
User類對應的UserTest.java:
package com.junit.MyClass; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.*; /** * Created by lesley on 2017/1/14. */ public class UserTest { private User user; @Before public void setUp() throws Exception { user = new User(); } @Test public void getName() throws Exception { assertEquals("sbw", user.getName()); } }
如果我們要批量執行這兩個類有兩種方法:
一、點擊tests下面這個測試包“com.junit.MyClass”,選“Run Tests in com.junit.MyClass”就可以執行這個包下所有的測試:
二、引入“測試套件”
如果我們只是選擇性的執行一些測試類,則我們可以利用“測試套件”——Suite(or test suite)。
編寫測試套件的原則:
1. 創建一個空類作為測試套件的入口;
2. 使用注解 org.junit.runner.RunWith 和 org.junit.runners.Suite.SuitClasses 修飾這個空類
3. 將org.junit.runners.Suite作為參數傳入給注解RunWith,以提示Junit為此類測試使用套件運行器執行。
4. 將需要放入此測試套件的測試類組成數組作為注解SuiteClasses的參數
5. 保證這個空類使用public修飾,而且存在公開的不帶任何參數的構造函數
AllTest.java:
package com.junit.MyClass; /** * Created by lesley on 2017/1/14. */ import org.junit.runner.*; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ CalculatorTest.class, UserTest.class }) public class AllTest { }
這個時候項目的結構如下: