Junit 参数化数组

问题描述

有没有办法用数组而不是整数来测试用例? 例如:

private int[] myArray;

public SortingTestNullCase(int[] arr){
    this.myArray=arr;
}

@Parameterized.Parameters
public static Collection testCases() {
    return Arrays.asList(new Integer[][] {
            {1,1,1},{2,2,2}
    });
}

我总是收到错误java.lang.IllegalArgumentException:参数数量错误”,因为我在构造函数中使用带参数化参数的整数,有什么办法可以用数组测试输入吗?

解决方法

您的代码有两个问题:

  1. 你的数组必须使用相同的类型,否则你会
    得到IllegalArgumentException: argument type mismatch

  2. 您的测试数据仅通过创建一个 Integer[][] 数组来创建一个参数输入。

这是一些应该适合您的代码

@RunWith(Parameterized.class)
public class PTest {

   private Integer[] myArray;

   public PTest(Integer[] array) {
      myArray = array;
   }

   @Parameters
   public static Collection testCases() {

      return Arrays.asList(new Integer[][] { { 1,1,1 } },new Integer[][] { { 2,2,2 } });
   }

   @Test
   public void doTest() {

      System.out.println(Arrays.toString(myArray));
   }

}

结果看起来像

[1,1]
[2,2]

您可以对数据成员使用 @Parameter 注释,而不是使用构造函数,该注释必须为 public 然后

@RunWith(Parameterized.class)
public class PTest {

   @Parameter
   public Integer[] myArray;

   @Parameters
   public static Collection testCases() {

      return Arrays.asList(new Integer[][] { { 1,2 } });
   }

   @Test
   public void doTest() {

      System.out.println(Arrays.toString(myArray));
   }

}