1. 程式人生 > >如何開始用Junit進行單元測試

如何開始用Junit進行單元測試

nbsp gif isp public aik 分享 pan 因此 可操作性

近段時間,公司預備推動單元測試以提高轉測代碼的質量,借鑒學習一些測試大佬的經驗自己試了一把,小測我在此寫下初寫單元測試的心得,希望能和大家交流交流單元測試技術!

一、概述

1、 單元測試(模塊測試)是開發者編寫的一小段代碼,用於檢驗被測代碼的一個很小的、很明確的功能是否正確。

2、一般認為,在結構化程序時代,單元測試所說的單元是指函數,在當今的面向對象時代,單元測試所說的單元是指類。以我的實踐來看,以類作為測試單位,復雜度高,可操作性較差,因此仍然主張以函數作為單元測試的測試單位

3、有一種看法是,只測試類的接口(公有函數),不測試其他函數,從面向對象角度來看,確實有其道理,但是,測試的目的是找錯並最終排錯,因此,只要是包含錯誤的可能性較大的函數都要測試,跟函數是否私有沒有關系

二、單元測試設計思想

1、單元測試可以借鑒類似功能測試的思想來進行設計

2、一個待測試類當作一個功能塊,待測試類當中的方法當作一個小的功能點,

單元測試就理解為對這個待測試方法進行場景設計,編寫代碼,查看執行各場景結果和場景覆蓋率

3、單元測試場景設計可以采用因果分析的方法,將各個參數的組合當作各條件組合,將輸入參數後執行方法的結果當作是各條件組合後的結果

三、單元測試設計(采用因果分析法)

1、確定待測試模塊即建立測試類

Game類及對應的Game測試類

技術分享圖片
package test.testDemo;

public class Game {
    
    public String winGame(int
num1,int num2) { int num=num1-num2; String txt=null; if(num>0) { txt="奪獎成功!"; }else if(num==0) { txt="安慰獎!"; }else { txt="奪獎失敗!"; } return txt; } }
View Code 技術分享圖片
package test.testDemo;

import static org.junit.Assert.*;

import org.junit.Test; public class GameTest { @Test public void testWinGame() { fail("Not yet implemented"); } }
View Code

2、分析因果條件列出場景並進行用例設計

技術分享圖片

3、單元測試用例編寫

3.1 參數化

3.1.1 引入待測試類,定義參數

3.1.2 引入註解@RunWith(Parameterized.class)參數化測試類

3.1.3 編寫需用到的參數的構造函數

3.1.4 編寫參數數據初始化方法

技術分享圖片
package test.testDemo;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

//引入註解@RunWith(Parameterized.class)參數化測試類
@RunWith(Parameterized.class)
public class GameTest {
    //引入待測試類,定義參數
    private Game game=new Game();
    
    private int num1;
    
    private int num2;
    
    private String expected;

    //編寫需用到的參數的構造函數
    public GameTest(int num1, int num2,String expected) {
        super();
        this.num1 = num1;
        this.num2 = num2;
        this.expected=expected;
    }
    
    //編寫參數數據初始化方法
    @Parameters
    public static Collection<Object[]> data(){
        return Arrays.asList(new Object[][] {{2,1,"奪獎成功!"},{2,2,"安慰獎!"},{1,2,"奪獎失敗!"}});
    }
    
    @Test
    public void testWinGame() {
        
    }

}
View Code

3.2 編寫單元測試方法

技術分享圖片
@Test
    public void testWinGame() {
        String txt=game.winGame(num1, num2);
        Assert.assertEquals(expected, txt);
    }
View Code

四、執行單元測試用例,檢查覆蓋率,覆蓋率需eclipse中安裝EclEmma插件

1、選中測試類》右鍵選中Coverage As》Junit Test

2、執行結果如下

技術分享圖片

如何開始用Junit進行單元測試