junit測試用例和測試套件的簡單使用


 

JUnit - 概述

所謂單元測試是測試應用程序的功能是否能夠按需要正常運行,並且確保是在開發人員的水平上,單元測試生成圖片。單元測試是一個對單一實體(類或方法)的測試。單元測試是每個軟件公司提高產品質量、滿足客戶需求的重要環節。

JUnit 是一個 Java 編程語言的單元測試框架。JUnit 在測試驅動的開發方面有很重要的發展,是起源於 JUnit 的一個統稱為 xUnit 的單元測試框架之一。

JUnit 促進了“先測試后編碼”的理念,強調建立測試數據的一段代碼,可以先測試,然后再應用。這個方法就好比“測試一點,編碼一點,測試一點,編碼一點……”,增加了程序員的產量和程序的穩定性,可以減少程序員的壓力和花費在排錯上的時間。

特點:

  • JUnit 是一個開放的資源框架,用於編寫和運行測試。 
  • 提供注釋來識別測試方法。 
  • 提供斷言來測試預期結果。 
  • 提供測試運行來運行測試。 
  • JUnit 測試允許你編寫代碼更快,並能提高質量。 
  • JUnit 優雅簡潔。沒那么復雜,花費時間較少。
  • JUnit 測試可以自動運行並且檢查自身結果並提供即時反饋。所以也沒有必要人工梳理測試結果的報告。
  • JUnit 測試可以被組織為測試套件,包含測試用例,甚至其他的測試套件。
  • JUnit 在一個條中顯示進度。如果運行良好則是綠色;如果運行失敗,則變成紅色。

測試用例:

1.新建NumberMethods類,里面寫好方法:

package demo;
/**類描述:
 *@author: zk
 *@date: 日期:2018-6-6 時間:下午4:16:49
 *@version 1.0
 */

public class NumberMethods {
    
    public int getCount(int i,int j){
        return i+j;
    }
    public int getSuntract(int i,int j){
        return i-j;
    }
    public float getDivision(int i,int j){
        return i/j;
    }
    public float getPlus(int i,int j){
        return i*j;
    }
}


2.新建NumberTest測試類,用於測試:

新建操作如下

 

正在測試的類 打自己的類名

選擇下一步,選中類中要測試的方法

然后會生成每個方法的默認測試方法,里面默認寫了一個類似報錯的方法fail(),重寫每個方法:

package demo;

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

/**類描述:
 *@author: zk
 *@date: 日期:2018-6-6 時間:下午4:21:31
 *@version 1.0
 */

public class NumberTest {
    static NumberMethods num=null;
    
    @BeforeClass
    public static void initclass(){
        System.out.println("@BeforeClass");
        num=new NumberMethods();
    }
    
    @AfterClass
    public static void afterclass(){
        System.out.println("@AfterClass");
        num=new NumberMethods();
    }
    
    @Before
    public void init(){
        System.out.println("@Before");
    }
    
    @After
    public void after(){
        System.out.println("@After");
    }
    @Test
    public void testGetCount() {
        NumberMethods number=new NumberMethods();
        int a=number.getCount(2, 4);
        assertEquals("計算錯誤", 6, a);
        System.out.println("測試加法通過");
    }

    @Test
    public void testGetSuntract() {
        System.out.println("測試減法通過");
    }

    @Test
    public void testGetDivision() {
        System.out.println("測試除法通過");
    }

    @Test
    public void testGetPlus() {
        System.out.println("測試乘法通過");
    }

}

鼠標右鍵>運行方式>junit測試

@BeforeClass用於初始化,只執行一次,由於其是在jvm還沒加載類之前執行,所以初始化的資源必須為靜態。
@AfterClass用於類后執行,只執行一次。

 @Before每個方法之前執行

@After每個方法之后執行

測試套件:

在實際項目中,隨着項目進度的開展,單元測試類會越來越多,可是直到現在我們還只會一個一個的單獨運行測試類,這在實際項目實踐中肯定是不可行的。為了解決這個問題,JUnit 提供了一種批量運行測試類的方法,叫做測試套件。

這樣,每次需要驗證系統功能正確性時,只執行一個或幾個測試套件便可以了。測試套件的寫法非常簡單,我們需要遵循以下規則:

1.  創建一個空類作為測試套件的入口。

2.  使用注解 org.junit.runner.RunWith 和 org.junit.runners.Suite.SuiteClasses 修飾這個空類。

3.  將 org.junit.runners.Suite 作為參數傳入注解 RunWith,以提示 JUnit 為此類使用套件運行器執行。

4.  將需要放入此測試套件的測試類組成數組作為注解 SuiteClasses 的參數。

5.  保證這個空類使用 public 修飾,而且存在公開的不帶有任何參數的構造函數。

 

新建JunitTestOne測試類:

package test;


import org.junit.Assert;
import org.junit.Test;

/**類描述:
 *@author: zk
 *@date: 日期:2018-6-6 時間:下午3:56:17
 *@version 1.0
 */

public class JunitTestOne {

    @Test
    public void test() {
        System.out.println("測試一。。。");  
        Assert.assertTrue(true);  
    }

}

新建JunitTestTwo測試類:

package test;


import org.junit.Assert;
import org.junit.Test;

/**類描述:
 *@author: zk
 *@date: 日期:2018-6-6 時間:下午3:58:56
 *@version 1.0
 */

public class JunitTestTwo {

    @Test
    public void test() {
         System.out.println("測試二。。。");  
         Assert.assertTrue(true);  
    }

}

新建測試套件類:

package test;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

/**類描述:
 *@author: zk
 *@date: 日期:2018-6-6 時間:下午4:00:06
 *@version 1.0
 */

@RunWith(Suite.class)
@SuiteClasses({ JunitTestOne.class,JunitTestTwo.class })
public class AllTests {

}

 測試通過,控制台輸出:

 

上例代碼中,我將2個測試類放入了測試套件AllTests中,在 Eclipse 中運行測試套件,可以看到2個測試類被調用執行了。測試套件中不僅可以包含基本的測試類,而且可以包含其它的測試套件,這樣可以很方便的分層管理不同模塊的單元測試代碼。

注意:一定要保證測試套件之間沒有循環包含關系,否則無盡的循環就會出現在我們的面前。

 

 

 

 

下面寫一個例子

新建AllTestsTwo測試類,包含測試類JunitTestOne、JunitTestTwo、AllTests:

package test;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

/**類描述:
 *@author: zk
 *@date: 日期:2018-6-6 時間:下午4:07:08
 *@version 1.0
 */

@RunWith(Suite.class)
@SuiteClasses({ AllTests.class, JunitTestOne.class, JunitTestTwo.class })
public class AllTestsTwo {

}

再給AllTests測試類@SuiteClasses中添加AllTestsTwo:

package test; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; /**類描述: *@author: zk *@date: 日期:2018-6-6 時間:下午4:00:06 *@version 1.0 */ @RunWith(Suite.class) @SuiteClasses({ AllTestsTwo.class, JunitTestOne.class,JunitTestTwo.class }) public class AllTests { }

然后執行AllTests的junit測試:

報錯,原因就是AllTests測試的AllTestsTwo包含對AllTests的測試。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM