Java 参数化JUnit+;JUnitParams测试不适用于具有

Java 参数化JUnit+;JUnitParams测试不适用于具有,java,unit-testing,junit,junit4,junitparams,Java,Unit Testing,Junit,Junit4,Junitparams,你能告诉我为什么考试不起作用吗?我得到: java.lang.IllegalStateException:尝试创建类[Ljava.lang.Integer]的对象时,找不到参数与参数中给定参数匹配(类型)的构造函数 我找不到JUnitParamsRunner使用数组作为参数的例子 @RunWith(JUnitParamsRunner.class) public class StatisticsUtilsParameterizedTest { private Object[] getVa

你能告诉我为什么考试不起作用吗?我得到:

java.lang.IllegalStateException:尝试创建类[Ljava.lang.Integer]的对象时,找不到参数与参数中给定参数匹配(类型)的构造函数

我找不到JUnitParamsRunner使用数组作为参数的例子

@RunWith(JUnitParamsRunner.class)
public class StatisticsUtilsParameterizedTest {

    private Object[] getValues() {
        Object[] objects = new Object[2];
        objects[0] = new Integer[]{1, 2, 3};
        objects[1] = 2;
        return objects;
    }

    @Test
    @Parameters(method = "getValues")
    public void shouldCalcAverageOK(Integer[] arg, int expected) {
        int average = StatisticsUtils.getAverage(arg);//requires an array
        assertEquals(expected, average);
    }
}
有一种方法可以使它与JUnitParams一起工作?

试试以下方法:

private Object[] getValues() {
    return $(
                 $($(1,2,3), 2),
                 $($(2,3,4), 4)
            );
}
或者以你试图写作的方式

  private Object[] getValues() {
      Object[] objects = new Object[2];
      objects[0] = new Object[]{new Integer[]{1, 2, 3},2};
      objects[1] = new Object[]{new Integer[]{2, 3, 4},4};
      return objects;
  }

希望这能有所帮助。

你真的能在需要整数的地方传递Object类型的引用吗?这不是一个答案,只是一种不同的看待事物的方式。Spock测试框架在这种情况下更好(实际上,一般来说比纯JUnit好得多)-看看