JUnit理论:为什么我不能使用列表(而不是数组)作为DataPoints?

Mat*_*rog 11 junit unit-testing

我已经开始使用新的(ish)JUnit Theories功能来参数化测试.如果您的理论设置为采用例如Integer参数,则Theories测试运动员会选择Integer标记为@DataPoint:

@DataPoint
public static Integer number = 0;
Run Code Online (Sandbox Code Playgroud)

以及Integer数组中的任何s:

@DataPoints
public static Integer[] numbers = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

甚至返回数组的方法,如:

@DataPoints 
public static Integer[] moreNumbers() { return new Integer[] {4, 5, 6}; };
Run Code Online (Sandbox Code Playgroud)

但不是Lists.以下不起作用:

@DataPoints 
public static List<Integer> numberList = Arrays.asList(7, 8, 9);
Run Code Online (Sandbox Code Playgroud)

编辑:看起来也不支持其他集合,因为这不起作用.

@DataPoints 
public static Collection<Integer> numberList = new HashSet<Integer>() {{
  add(7);
  add(8);
  add(9);
}};
Run Code Online (Sandbox Code Playgroud)

我做错了什么,或做Lists,Sets等真的不行吗?它是一种有意识的设计选择,不允许使用Collections作为数据点,还是只是一个尚未实现的功能?是否有计划在未来的JUnit版本中实现它?

(我目前使用的是4.8.1版本,而最新版本是4.8.2,但看起来这不是4.8.2中添加的内容)

iwe*_*ein 1

我已经查看了这个问题,似乎现在有一个待提交的提交。它不在那里的原因似乎很简单,没有人要求它,而且做起来非常复杂(正如您在补丁中所证明的那样)