1. 程式人生 > >關於testhome junit引數化的問題解決

關於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); 這個類的程式碼,我就自己製作了點資料。

其實這裡我只是簡單的測試,應該用等價類,邊界值加上點資料的,只是在上班時間,順帶趕緊記錄下。