Передать параметр из JUnit 5 @BeforeEach в отдельный тест - PullRequest
0 голосов
/ 21 сентября 2019

Скажем, у меня есть метод @BeforeEach, который использует внешний метод для получения значения и установки чего-либо с указанным значением:

@BeforeEach
void foo() {
  int bar = getBarFromSomething();
  setupSomethingWithBar(bar);
}

Теперь я хочу иметь возможность передать значение bar (который может меняться каждый раз при вызове getBarFromSomething()) для каждого отдельного тестового случая после вызова метода foo() перед тестовым примером.Я хочу сделать это так, чтобы я мог что-то протестировать, используя параметр, который я установил в вызове метода @BeforeEach foo():

@Test
void test_baz(int bar) {
  assertEquals(bar, 5);
}

Как мне передать параметр из вызова @BeforeEach foo() каждомуиндивидуальный @Test случай?Я не думаю, что параметризованные тесты будут работать, так как метод, который генерирует bar, может выдавать разные результаты, поэтому его нужно вызывать только один раз за запуск @BeforeEach и @Test и его нужно использовать для настройки чего-либов foo() вызове.

Ответы [ 2 ]

4 голосов
/ 21 сентября 2019

Просто переместите переменную метода в переменную-член ... вот так:

int bar = getBarFromSomething();
@BeforeEach
void foo() {
    setupSomethingWithBar(bar);
}

Тогда

@Test
void test_baz() {
    assertEquals(bar, 5);
}

Должно работать

1 голос
/ 25 сентября 2019

Не существует специфического для джунта объекта, который мог бы усилить вашу идею.

Если вы не используете @ TestInstance (Lifecycle.PER_CLASS) , новый экземпляр класса теста будет создаваться для каждого вызова теста.Это означает, что @Bill K верен, и вы можете инициализировать поле класса теста.

Но лучше использовать параметризованный тест с @ MethodSource и выполнение setup прямо в тесте где-то в разделе , заданном .Именно эта задача @ParametrizedTests предназначена для решения.

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class TestSample {

   @ParameterizedTest
   @MethodSource("bars")
   fun isFive(bar:Int){
       setupSomethingWithBar(bar)  
       assertEquals(bar, 5)
   }

   fun bars() = (1..10).asSequence().asStream()
}
...