軟體測試_JUnit+Ant構建自動的單元測試(2)
阿新 • • 發佈:2019-01-02
引數化測試
和建立Test Case差不多,不過需要:
為測試類新增@RunWith(Parameterized.class),@RunWith 用來執行套件測試
否則Junit的預設執行無參構造方法,右鍵直接執行就難了:
java.lang.Exception: Test class should have exactly one public zero-argument constructor
…
建立一個公共的建構函式,用於接受測試資料
這裡還是三角形判斷方法為例,則引數a、b、c對應三邊,result為預期結果
public TestTriangle (Integer a, Integer b, Integer c, Integer result) {
this.a = a;
this.b = b;
this.c = c;
this.result = result;
}**
建立一個公共的靜態方法,帶有@Parameters (或@Parameterized.Parameters),它返回一個Collection來作為測試資料集合
這裡的順序和構造方法的引數列表順序一樣,所以依次為a、b、c、result
@Parameterized.Parameters
public static Collection primeNumbers() {
return Arrays.asList(new Object[][] {
{ 3, 3, 3, 3 },
{ 3, 3, 4, 2 },
{ 3, 4, 5, 1 },
{ 3, 4, 9, 1 },
{ 3, 4, -1, -1 }
});
}
為每組測試資料建立一個例項變數,以此建立你的測試用例
所以修改測試方法如下,被測試類也可以作為測試用例的field
/**
* Test method for {@link Triangle#judgeTrangle(int, int, int)}.
*/
@Test
public void testJudgeTrangle() {
//fail("Not yet implemented"); // TODO
System.out.println("Parameterized Number is : " + a +", "+b+", "+c);
Triangle t = new Triangle();
assertEquals(this.result, t.judgeTrangle(this.a, this.b, this.c));
}
執行結果
因為{ 3, 4, 9, 1 }這一組的結果(測試為0)和預期的1不一樣,所以會有Failure
試過直接在測試方法內測試所有資料,結果覆蓋率較低
Ant執行測試
測試用例的測試結果與預期相同時
不相同時
附:完整程式碼
package test;
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.Collection;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import test.Triangle;
import junit.framework.TestCase;
/**
*
*/
/**
* @author bottomheater Email:[email protected]
* @version 建立時間:2016年6月14日 下午9:06:13
* 類說明
*/
/**
* @author Administrator
*
*/
@RunWith(Parameterized.class)
public class TestTriangle{
private Integer a;
private Integer b;
private Integer c;
private Integer result;
@Parameterized.Parameters
public static Collection primeNumbers() {
return Arrays.asList(new Object[][] {
{ 3, 3, 3, 3 },
{ 3, 3, 4, 2 },
{ 3, 4, 5, 1 },
{ 3, 4, 9, 1 },
{ 3, 4, -1, -1 }
});
}
public TestTriangle(Integer a, Integer b, Integer c, Integer result) {
this.a = a;
this.b = b;
this.c = c;
this.result = result;
}
/**
* Test method for {@link Triangle#judgeTrangle(int, int, int)}.
*/
@Test
public void testJudgeTrangle() {
//fail("Not yet implemented"); // TODO
System.out.println("Parameterized Number is : " + a +", "+b+", "+c);
Triangle t = new Triangle();
assertEquals(this.result, t.judgeTrangle(this.a, this.b, this.c));
}
}