JUnit 5 и несколько входных данных (Java)

Как использовать JUnit 5 для запуска серии тестов вычислений, каждый для разных пар входных данных и результатов теста?

Условие: вычисление должно выполняться только один раз для каждого входа, а не для каждого теста отдельно, так как это занимает много времени.

Каждый тест проверяет число, выдаваемое уже несовершенно написанным вычислительным модулем. Невозможно реструктурировать модуль на отдельные тестируемые подфункции.


person Mateusz    schedule 02.01.2018    source источник
comment
DataModelTest.readModel(java.lang.String,java.lang.String)' could not be resolved -- Имя класса ModelTest, а не DataModelTest.   -  person Jim Garrison    schedule 02.01.2018
comment
См.: stackoverflow.com/questions/46897134/ (@отличный ответ davidxxx) Похоже, вы неправильно используете аннотацию @MethodSource, т.е. метод не должен принимать никаких аргументов.   -  person geneSummons    schedule 03.01.2018
comment
@geneSummons - это решение является стандартом, в котором все аргументы считываются только с помощью тестового метода. Я хотел бы иметь функцию, которая могла бы считывать аргументы и передавать тестовым методам предварительно вычисленные значения, такие как конструктор тестового класса, который имел бы их в качестве атрибута. Но вроде бы это запрещено.   -  person Mateusz    schedule 03.01.2018


Ответы (1)


Быстрое решение состоит в том, чтобы

  1. Прочитайте все данные и выполните все вычисления в конструкторе, сохраняя выходные данные в виде массива/списка и делая то же самое с выходными данными тестов.

  2. Вызовите @ParameterizedTests с @ValueSource, принимающим массив целых чисел. Они будут перебирать списки, хранящиеся как атрибуты объекта, используя эти целые числа в качестве индексов.

person Mateusz    schedule 08.01.2018