Я не знаком с параметризованным тестированием с помощью JUnit. Тем не менее, я нашел это . Если вы посмотрите на подпись метода:
public static Collection<Object[]> data()
В Котлине это:
fun data() : Collection<Array<Any>>
Вы увидите, что это коллекция, содержащая массив объектов. List
- это коллекция, но List
- это не Array
. Это двумерная система, где второе измерение содержит аргументы, которые вы хотите передать, включая длину.
Поскольку они используют массив в документах, я бы посоветовал вам сделать это.
Недавно они ввели отдельные параметры. Подпись выглядит так:
@Parameters
public static Iterable<? extends Object> data()
И снова, Список является Итерируемым. Однако в вашем случае это тот, который вы в конечном итоге вызывали без массива.
В результате вы передали один аргумент конструктору с двумя аргументами, который вызвал исключение. Вы передали Iterable>, который не является Collection<Array<Any>>
. Это означает, что вместо этого вы создали систему, которая работает для одного аргумента. Поскольку конструктор принимает два аргумента, вы получаете исключение. Вы передаете один аргумент (список), но вам нужно два аргумента.
Вот почему использование массива работает, а List - нет; если вы используете список, предполагается, что у вас есть конструктор с одним аргументом, где, как и в случае с массивом, требуется несколько. Насколько я могу судить, JUnit не поддерживает списки вместо массивов для конструкторов с несколькими аргументами.
TL; DR: Причина, по которой массивы работают, а список - нет, заключается в том, что он считает, что список является аргументом для конструктора с одним аргументом, где, как и в случае с массивом, он может быть любым числом аргументы.