關於testhome junit引數化的問題解決
問題的描述是無法獲取引數化, 我也心血來潮,自己花了幾分鐘改正問題
@RunWith(Parameterized.class)
public class ResultParamTest {
private int actCode;
private String actMessage;
private int expCode;
private String expMessage;
public ResultParamTest(int expCode, int actCode, String expMessage, String actMessage) {
this.expCode = expCode;
this.actCode = actCode;
this.expMessage = expMessage;
this.actMessage = actMessage;
}
@Parameterized.Parameters
public static Collection prepareData() throws IOException {
ResultParam resultParam = new ResultParam("test_case.xlsx", 0);
ArrayList<Integer> a = resultParam.expCode();
ArrayList<Integer> b = resultParam.actCode();
ArrayList<String> c = resultParam.expMessage();
ArrayList<String> d = resultParam.actMessage();
Object[][] objects = {{a.get(0), b.get(0), c.get(0), d.get(0)}, {a.get(1), b.get(1), c.get(1), d.get(1)},........{}....{}};
return Arrays.asList(objects);
}
@Test
public void testResultParam() throws IOException {
Assert.assertEquals(expCode, actCode);
Assert.assertEquals(expMessage, actMessage);
}
}
改正後的程式碼:
package com.mj;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import junit.framework.Assert;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@RunWith(Parameterized.class)
public class CalculatorTest {
private int actCode;
private String actMessage;
private int expCode;
private String expMessage;
public CalculatorTest(int expCode, int actCode, String expMessage,
String actMessage) {
this.expCode = expCode;
this.actCode = actCode;
this.expMessage = expMessage;
this.actMessage = actMessage;
}
@Parameterized.Parameters
public static Collection prepareData() {
ArrayList<Integer> a = new ArrayList<Integer>();
ArrayList<Integer> b = new ArrayList<Integer>();
ArrayList<String> c = new ArrayList<String>();
ArrayList<String> d = new ArrayList<String>();
// 五個正常用例
for (int i = 0; i < 5; i++) {
a.add(i);
b.add(i);
c.add("正確" + i);
d.add("正確" + i);
}
// 五個非正常用例
for (int i = 0; i < 5; i++) {
a.add(i);
b.add(i + 1);
c.add("正確" + i);
d.add("錯誤" + (i + 1));
}
int size = a.size() - 1;
Object[][] objList = new Object[size][4];
for (int i = 0; i < objList.length; i++) {
objList[i][0] = a.get(i);
objList[i][1] = b.get(i);
objList[i][2] = c.get(i);
objList[i][3] = d.get(i);
}
return Arrays.asList(objList);
}
@Test
public void test() {
System.err.println("expCode is " + expCode + " actCode is " + actCode
+ " expMessage is " + expMessage + " actMessage is "
+ actMessage);
assertEquals(expCode, actCode);
assertEquals(expMessage, actMessage);
}
}
執行列印資料:
expCode is 0 actCode is 0 expMessage is 正確0 actMessage is 正確0
expCode is 1 actCode is 1 expMessage is 正確1 actMessage is 正確1
expCode is 2 actCode is 2 expMessage is 正確2 actMessage is 正確2
expCode is 3 actCode is 3 expMessage is 正確3 actMessage is 正確3
expCode is 4 actCode is 4 expMessage is 正確4 actMessage is 正確4
expCode is 0 actCode is 1 expMessage is 正確0 actMessage is 錯誤1
expCode is 1 actCode is 2 expMessage is 正確1 actMessage is 錯誤2
expCode is 2 actCode is 3 expMessage is 正確2 actMessage is 錯誤3
expCode is 3 actCode is 4 expMessage is 正確3 actMessage is 錯誤4
因為我對群友的業務不熟悉,加上我沒有 ResultParam resultParam = new ResultParam("test_case.xlsx", 0); 這個類的程式碼,我就自己製作了點資料。
其實這裡我只是簡單的測試,應該用等價類,邊界值加上點資料的,只是在上班時間,順帶趕緊記錄下。