【问题标题】:JUnit Parameterized Test - multidimensional array mixed typesJUnit Parameterized Test - 多维数组混合类型
【发布时间】:2016-07-21 08:47:30
【问题描述】:

我在使用 JUnit 4.x 进行参数化时遇到问题。我的参数化测试由 1 个数组混合类型 {{integer multidimensional array} 和 1 个 double} 作为参数组成,我很难声明它们。请参阅下面的代码。

测试机器人的类

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));
    }

}

【问题讨论】:

    标签: java arrays multidimensional-array junit mixed


    【解决方案1】:
    @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
            }
    
        });
    }
    

    旁注:您必须在断言方法中提供增量:

    double delta = 0.1; // choose something appropriate here
    assertEquals("divergente", expected, Robot.companyBotStrategy(trainingData), delta);
    

    【讨论】:

    • 能否以更好的方式格式化参数化名称而不仅仅是索引?这里的问题是如何格式化(也就是覆盖 toString())的第一个参数,它是 int[][] object
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 2014-04-28
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    相关资源
    最近更新 更多