Параметризованный тест JUnit5 с несколькими источниками методов

У меня есть 4 теста, каждый со своим источником метода, но единственная разница между ними - один параметр, в каждом методе я инициирую макеты по-разному. Есть ли способ передать источник нескольких методов?

Пример:

    @ParameterizedTest
    @MethodSource("mSource1")
    public void testM1(MyMock m1, MyMock m2) {
            callMut(m1, m2, ENUM.VAL1);
            //same assertion
    }

    @ParameterizedTest
    @MethodSource("mSource2")
    public void testM2(MyMock m1, MyMock m2) {
            callMut(m1, m2, ENUM.VAL2);
            //same assertion
    }

   private static Stream<Arguments>  mSource1() {
            when(myMock1.getX()).thenReturn("1");
            //...
    }

   private static Stream<Arguments>  mSource2() {
            when(myMock1.getY()).thenReturn("1");
            //...
   }

Я ищу что-то вроде:

@ParameterizedTest
@MethodSource("mSource1", "mSource2")
public void testM1(MyMock m1, MyMock m2, MyEnum myEnumValue) {
    callMut(m1, m2, myEnumValue);
    //same assertion
}

person telebog    schedule 05.11.2018    source источник


Ответы (1)


Согласно javadocs, @MethodSource может принимать столько фабричных методов, сколько вам нужно:

общедоступное абстрактное значение String[]

Имена методов тестового класса для использования в качестве источников аргументов; не должно быть пустым.

Поэтому просто поместите их в фигурные скобки и убедитесь, что они также возвращают значение перечисления:

@MethodSource({"mSource1", "mSource2"})

Однако, насколько я понимаю, вам может потребоваться переместить настройку when().then() в сам тест, но это деталь вашего внедрения.

person Maciej Kowalski    schedule 05.11.2018