單元測試
一、概述
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;
}
}
package test.testDemo;
import static org.junit.Assert.*;
import org.junit.Test;
public class GameTest {
@Test
public void testWinGame() {
fail("Not yet implemented");
}
}
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() {
}
}
3.2 編寫單元測試方法
@Test
public void testWinGame() {
String txt=game.winGame(num1, num2);
Assert.assertEquals(expected, txt);
}
四、執行單元測試用例,檢查覆蓋率,覆蓋率需eclipse中安裝EclEmma插件
1、選中測試類》右鍵選中Coverage As》Junit Test
2、執行結果如下



浙公網安備 33010602011771號