Как можно использовать в качестве аргументов созданную функцию в параметризованных тестах?

public class Radio {
private int numberRadioStation;
private int soundVolume;

public int getNumberRadioStation() {
    return numberRadioStation;
}

public void setNumberRadioStation(int newNumberRadioStation) {
    if (newNumberRadioStation < 0 || newNumberRadioStation > 9) {
        return;
    }
    this.numberRadioStation = newNumberRadioStation;
}

Для тестирования я использую следующий алгоритм

public class RadioTest {
@Test
public void shouldNotExistChannel() {
    Radio rad = new Radio();
    rad.setNumberRadioStation(10);


    int expected = 0;
    int actual = rad.getNumberRadioStation();
    Assertions.assertEquals(expected, actual);
}

В переменную setNumberRadioStation необходимо подставить несколько разных значений. Как можно использовать этот сеттер в параметризованных тестах?


Ответы (1 шт):

Автор решения: Roman-Stop RU aggression in UA

В junit 5 есть много вариантов. Например, параметры можно задавать в аннотации на методе:

@ParameterizedTest
@ValueSource(ints = {-1, 10})
public void shouldNotExistChannel(int numberRadioStation) {
    Radio rad = new Radio();
    rad.setNumberRadioStation(numberRadioStation);

    int expected = 0;
    int actual = rad.getNumberRadioStation();
    Assertions.assertEquals(expected, actual);
}

Или с помощью отдельного метода:

private static Stream<Arguments> provideNonExistingNumbers() {
    return Stream.of(
      Arguments.of(-1),
      Arguments.of(10)
    );
}

@ParameterizedTest
@MethodSource("provideNonExistingNumbers")
public void shouldNotExistChannel(int numberRadioStation) {
    Radio rad = new Radio();
    rad.setNumberRadioStation(numberRadioStation);

    int expected = 0;
    int actual = rad.getNumberRadioStation();
    Assertions.assertEquals(expected, actual);
}
→ Ссылка