Теории JUnit: Почему я не могу использовать списки (вместо массивов) как DataPoints?

Я начал использовать новую функцию (ish) Theories для параметризации тестов. Если ваша Теория настроена так, чтобы принимать, например, аргумент Integer, тестовый бегун Theories выбирает любой Integer, отмеченный @DataPoint:

@DataPoint
public static Integer number = 0;

а также любые Integer в массивах:

@DataPoints
public static Integer[] numbers = {1, 2, 3};

или даже методы, возвращающие массивы вроде:

@DataPoints 
public static Integer[] moreNumbers() { return new Integer[] {4, 5, 6}; };

но не в List s. Не работает следующее:

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

Изменить. Похоже, что другие коллекции также не поддерживаются, так как это не работает.

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

Я делаю что-то не так, или List s, Set s и т.д. действительно не работает? Было ли сознательным выбором дизайна не позволять использовать Collection в качестве точек данных, или это просто функция, которая еще не реализована? Планируете ли вы реализовать его в будущей версии JUnit?

(В настоящее время я использую версию 4.8.1, тогда как самая новая версия - 4.8.2, но она выглядит как, это не то, что было добавлено в 4.8.2)

Ответ 1

Я рассмотрел эту проблему, и кажется, что в ней есть ожидающая фиксация. Причина, по которой его не было, похоже, просто, что никто не просил об этом, и это довольно сложно сделать (как вы доказали в ваш патч)