java知识积累——单元测试和JUnit(二)
首先來復習一下幾個重要知識點,然后接著進行一些介紹。在上一篇文章中,我曾經貼過下面這張圖片:
在Which method stubs would you like to create?這里,現在結合4個標注的含義來說明一下:
@BeforeClass ?標注的方法會在類加載的時候執行一次,且僅此一次,該方法必須是public和static的
@AfterClass ? 標注的方法會在類銷毀的時候執行一次,且僅此一次,該方法必須是public和static的
@Before ?標注的方法會在每個測試方法執行前先執行一次
@After 標注的方法會在每個測試方法執行結束后執行一次
以上四個標注,對應了那個勾選列表中的四個方法,可以在創建測試類時根據具體情況進行勾選。
?
在測試過程中,可能需要針對一個方法的不同臨界值進行多組數據的測試。下面給出這種情況下的測試方法:
在上一遍文章中的例子 中,Calculator類的square方法需要針對正數、負數、零3種情況進行測試。所以我們如下進行,首先在Calculator類上右鍵new一 個JUint Test Case,起名為CalculatorSquareTest,然后該類的代碼修改如下:
1 package org.logback.test; 2 3 import static org.junit.Assert.*; 4 5 import java.util.Arrays; 6 import java.util.Collection; 7 8 import org.junit.Before; 9 import org.junit.Test; 10 import org.junit.runner.RunWith; 11 import org.junit.runners.Parameterized; 12 import org.junit.runners.Parameterized.Parameters; 13 14 @RunWith(Parameterized. class ) 15 public class CalculatorSquareTest { 16 17 private static Calculator example = new Calculator(); 18 19 private int param; 20 21 private int result; 22 23 @Parameters//定義測試數據集合,前者param后者result 24 public static Collection data(){ 25 return Arrays.asList(new Object[][]{ 26 {2,4}, 27 {0,0}, 28 {-3,9}, 29 }); 30 } 31 32 @Before 33 public void setUp() throws Exception { 34 example.clear(); 35 } 36 37 @Test 38 public void testSquare() { 39 example.square(param); 40 assertEquals(result, example.getResult()); 41 } 42 43 //構造函數,對變量進行初始化,注意參數順序應與定義的測試集合的參數順序一致 44 public CalculatorSquareTest(int param,int result){ 45 this.param = param; 46 this.result = result; 47 } 48 49 }14行設置了本測試類的運行器為Parameterized.class,因為此類需要多組數據,所以不能采用默認的運行器。
23-30行是定義測試數據集合,此處的2元組數據的順序要統一,并且與構造函數的參數順序要一致。
44-47行是構造函數,通過定義的數據集合和構造函數,將要測試的情況傳遞給測試類,然后進行測試。
也就是說,執行了3次該測試類,依次采用了數據集合中的數據。此例中數據集合的順序順序為{處理值,預期處理結果}。
結果如下:
可以看到runs那里是3/3。
?
OK,此時我們的測試類數量就已經上升為2個了,如果分別運行2個測試類再觀察結果可能比較麻煩。或者有人覺得這還不算什么,那要是有10個測試類呢?所以就引出了打包測試的概念,我們可以通過JUnit提供的機制,一次性把之前的2個測試類都執行了。
在Calculator類上右鍵new一個JUnit Test Case,方法處什么都不勾選,然后點擊Finish。將代碼改為如下:
1 package org.logback.test; 2 3 import static org.junit.Assert.*; 4 5 import org.junit.Test; 6 import org.junit.runner.RunWith; 7 import org.junit.runners.Suite; 8 9 @RunWith(Suite.class) 10 @Suite.SuiteClasses({ 11 CalculatorSquareTest.class, 12 CalculatorTest.class 13 }) 14 public class CalculatorAllTest { 15 }?
9行指定了此測試類的運行器
10-13行指定了要同時運行哪些測試類
該測試類并無實際實現
下面只要將此類run as JUnit Test即可,得到結果如圖所示:
可以發現,我們上一遍文章的測試類,和這篇文章的測試類都同時執行了,并且列出了詳細結果。
以上就是我對于JUnit的研究結果,我感覺一般的工作這些技巧就可以應付了,當然如果哪位Geek有更高級方便的用法也歡迎分享。
轉載于:https://www.cnblogs.com/felix-/p/4331929.html
總結
以上是生活随笔為你收集整理的java知识积累——单元测试和JUnit(二)的全部內容,希望文章能夠幫你解決所遇到的問題。