【问题标题】:Parametrized JUnit+JUnitParams test is not working for arrays with参数化的 JUnit+JUnitParams 测试不适用于具有
【发布时间】:2014-07-22 16:21:36
【问题描述】:

你能告诉我为什么测试不工作吗?我得到了:

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 一起工作?

【问题讨论】:

  • 你真的可以在需要 Integer 的地方传递 Object 类型的引用吗?
  • 这不是一个答案,只是一种不同的看待事物的方式。 Spock 测试框架在这种情况下要好得多(实际上,总体上比纯 JUnit 好得多) - 看看 spock-framework.readthedocs.org/en/latest/…

标签: java unit-testing junit junit4 junitparams


【解决方案1】:

试试这个:

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2014-04-14
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多