JUnit 参数化测试 - 多维数组混合类型

4

我在使用JUnit 4.x的参数化测试时遇到了问题。我的参数化测试包括一个混合类型的数组{{整数多维数组}和1个双精度浮点数}作为参数,我不知道如何声明它们。请参见下面的代码。

测试机器人的类

public class Robot {
    public static double companyBotStrategy(int[][] trainingData) {
        double botTime = 0;
        double isCorrect = 0;

        for (int i = 0; i < trainingData.length; i++) {
            int[] v = trainingData[i];
            if (v[1] == 1) {
                botTime += v[0];
                isCorrect++;
            }
        }
        return botTime / isCorrect;

    }

}

JUnit测试参数化

import static org.junit.Assert.assertEquals;

import java.util.Arrays;

import org.junit.Test;
import org.junit.runners.Parameterized.Parameters;

public class RobotPrmtTest {

    private double expected;
    private int[][] trainingData;

    public RobotPrmtTest(int[][] trainingData, double expected) {
        this.trainingData = trainingData;
        this.expected = expected;
    }

    @Parameters(name = "{index}")
    public static Iterable<Object[]> getLoadTest() {

        return Arrays.asList(new Object[][] { });
        /*loadTest array mix type
         * {int [][] trainingData, double expected}
         * looks like it
        {
            {
                {{ 6, 1 }, { 4, 1 }},4.5
            },
            {
                {{4,1},{4,-1}, {0,0}, {6,1}},5.0
            }
        }
        */
    }

    @Test
    public void validateParamaters() {
        assertEquals("divergente", expected, Robot.companyBotStrategy(trainingData));
    }

}
1个回答

2
@Parameters(name = "{index}")
public static Iterable<Object[]> getLoadTest() {

    return Arrays.asList(new Object[][] {
        {
            new int[][]{{6, 1}, {4, 1}}, 4.5
        },
        {
            new int[][]{{4, 1}, {4, -1}, {0, 0}, {6, 1}}, 5.0
        }

    });
}
注意:在您的assert方法中必须提供一个delta:
double delta = 0.1; // choose something appropriate here
assertEquals("divergente", expected, Robot.companyBotStrategy(trainingData), delta);

1
参数化名称是否可以以更好的方式格式化,而不仅仅是索引?问题在于如何格式化(又称覆盖toString())int [] []对象的第一个参数。 - Ewoks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接