Junit4 簡單教程

一、環境搭建

       對於習慣使用Eclipse開發平臺來說,Junit早已是非常通常的插件,在Eclipse開發平臺中,可以非常方便地搭建Junit測試環境。

       1、在Eclipse上創建工程,任何Java工程都行。

       2、引入Junit的libraries庫,選用Junit4。如下圖所示:

3、新建一個Java類,用於演示Junit4類的自動生成,java代碼如下:

  1. package com.hy;  
  2.   
  3. public class Demo {  
  4.   
  5.     public void method1() {  
  6.         System.out.println("method1");  
  7.     }  
  8.   
  9.     public void method2() {  
  10.         System.out.println("method2");  
  11.     }  
  12.   
  13.     public void method3() {  
  14.         System.out.println("method3");  
  15.     }  
  16.   
  17. }  

4、在該類上右鍵單擊新建,選JUnit Test Case,自動生成一個對應的測試類,如下圖所示:


4、這樣就能自動地生成對應的測試類了,測試類代碼發下:

  1. package com.hy;  
  2.   
  3. import static org.junit.Assert.*;  
  4.   
  5. import org.junit.After;  
  6. import org.junit.AfterClass;  
  7. import org.junit.Before;  
  8. import org.junit.BeforeClass;  
  9. import org.junit.Test;  
  10.   
  11. public class DemoTest {  
  12.   
  13.     @BeforeClass  
  14.     public static void setUpBeforeClass() throws Exception {  
  15.     }  
  16.   
  17.     @AfterClass  
  18.     public static void tearDownAfterClass() throws Exception {  
  19.     }  
  20.   
  21.     @Before  
  22.     public void setUp() throws Exception {  
  23.     }  
  24.   
  25.     @After  
  26.     public void tearDown() throws Exception {  
  27.     }  
  28.   
  29.     @Test  
  30.     public void testMethod1() {  
  31.         fail("Not yet implemented");  
  32.     }  
  33.   
  34.     @Test  
  35.     public void testMethod2() {  
  36.         fail("Not yet implemented");  
  37.     }  
  38.   
  39.     @Test  
  40.     public void testMethod3() {  
  41.         fail("Not yet implemented");  
  42.     }  
  43.   
  44. }  


5、如此一來,測試類環境的搭建過程就完成了,最後要做的就是,根據實際的業務需求,對測試類中的測試方法編寫單元測試代碼,直到運行調通。

 

二、基本規則

       從上面的演示可知,測試類名一般都以Test結尾,測試方法名以test開頭。這個也是Junit的基本命名規則。

 

三、Junit註解

      我們此次針對的是Junit4版本,註解也是在Junit4版本纔有的,之前的版本並無註解功能。而註解開發基本上被認爲是一種優秀的設計,所以我們寫單元測試用例時,儘可能地去了解並使用註解。

     @Test:使用該註解的方法爲測試方法,自動運行時能夠識別並被執行

      包含兩個參數:expected=XXXException.class 期望出現的異常

                               timeout=xxx 設定程序運行的超時時間

     @Ignore:被忽略的測試方法

     @Before:在每個測試方法之前運行

     @After: 在每個測試方法之後運行

     @BeforeClass:在所有測試開始之前運行

     @AfterClass:在所有測試開始之後運行
  

      以上幾個就是Junit 4的關鍵註解,熟練使用這幾個註解,將來的測試用例編寫肯定能事半功倍。

     注意:@Before與@BeforeClass的區別

     @Before會加在每個方法前執行,即有幾個@Test就會執行幾遍。

     @BeforeClass 只在所有測試之前執行,只會執行一次。並且@BeforeClass修飾的方法必須是公有的靜態方法(public static )。

     @After和@AfterClass也類似

     每個測試類中這四個註解不能重複使用,一個方法只能從這四個註解中挑選其中一個。

 

四、基本寫法

       1、setUp(),tearDown(),setUpBeforeClass(),tearDownAfterClass()這四個方法其實就是對應的@Before、@BeforeClass、@After、@AfterClass這四個註解,在Junit4開始使用註解時,其實可以替代這四個方法的功能,只是這四個方法是歷史遺留方法,可以考慮使用,也可以直接使用註解替代。

       2、Assert是單元測試用例的核心,建議使用靜態導入。

       3、待測試對象,一般建議設計成靜態的。

       4、測試方法的要求:帶@Test註解,方法名隨意,返回值必須爲void,不能帶有參數,可以聲明異常(可以參考演示代碼)。

       5、Fixture方法的作用

            前面介紹的@Before、@BeforeClass、@After、@AfterClass註解修飾的方法,即爲Fixture方法,它是在某些階段必然被調用的方法,如註解功能所示。

            @Before、@After修飾方法的一個用處是對待測試對象的“復原”操作,如成員變量回歸,數據庫回滾等,目的是消除@Test方法之間的耦合。也可以用來打印日誌。

            @BeforeClass修飾方法可以設計成用來加載一些耗時耗力的操作,如文件流的讀取,數據庫連接等,然後在@AfterClass中釋放對應的資源即可。

      6、限時測試

           @Test(timeout=1000)超時時間單位爲毫秒

           用於測試是否有死循環工是實時性要求比較高的用例,這個非常方便而且非常有用。

      7、測試異常

            @Test(expected=XXXException.class) XXXException爲聲明式異常

            用來驗證聲明式異常,注意此測試的含義:出現了期望的異常,叫做正常,若沒出現異常,Junit會報錯,認爲不正常。這段描述有些拗口,請各位多琢磨琢磨。

      8、運行器Runner

            類註解@RunWith,指定不同的類可以改變測試類的行爲

      9、參數化測試

            主要是針對一些相同功能卻要進行多組參數測試的情況,開發步驟如下:

            1)參數化測試的類和普通測試類不同,要用特殊的Runner,類註解需要改爲@RunWith(Parameterized.class)

            2)定義該測試類的成員變量,一個放測試參數,另一個放該參數產生的預期結果

            3)定義測試數據集合方法 public static Collection data() {...},注意該方法要用@Parameters修飾(數據格式爲二維數組)

            4)定義帶參數的構造函數,注意定義數據集合時,要和構造函數參數次序一致

            其他的與普通測試類似

            注意:若測試數據有兩條,則該類下的所有@Test的方法都會執行兩次,所以參數化測試的類不要和別的@Test放在一起。參數化測試方法一般建議單獨建立類。

            演示代碼如下:

  1. //指定@RunWith  
  2. @RunWith(Parameterized.class)  
  3. public class ParamTest {  
  4.   
  5.     //定義成員變量,i爲測試參數,j爲測試結果  
  6.     private int i;  
  7.     private int j;  
  8.   
  9.     //構造函數  
  10.     public ParamTest(int i, int j) {  
  11.         super();  
  12.         this.i = i;  
  13.         this.j = j;  
  14.     }  
  15.   
  16.     //測試數據集合,注意使用的註解,數據結構及次序  
  17.     @Parameters  
  18.     public static Collection data() {  
  19.         return Arrays.asList(new Object[][]{{1,2},{3,4},{4,6}});  
  20.     }  
  21.     @Test  
  22.     public void testMethod1() {  
  23.         System.out.println(i);  
  24.         System.out.println(j);  
  25.         //簡單測試,只測試參數加1會不會等於預期結果  
  26.         Assert.assertEquals(i+1, j);  
  27.     }  
  28. }  

       預期的執行結果是前兩組參數測試正確,最後一組測試錯誤,運行後的結果爲:

執行結果與預期結果相符合,OK

 

      10、打包測試

            將測試類集中起來運行,提高測試效率,代碼如下:

  1. @RunWith(Suite.class)  
  2. @Suite.SuiteClasses({  
  3.     DemoTest.class  
  4. })  
  5. public class ModuleTest {  
  6.   
  7.     public ModuleTest() {  
  8.         // TODO Auto-generated constructor stub  
  9.     }  
  10.   
  11. }  

           1)@Suite.SuiteClasses裏面的是需要打包測試的類

           2)該類中可以爲空,類名建議爲模塊名+Test結尾,如ModuleTest.java

      以上是Junit4的最基本的使用,相信掌握了這些,對於編寫常規的測試用例已經不是難事,同樣,Junit還有更多更有意思的功能等待我們去挖掘……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章