JUnit 5 с загрузкой Spring - как повторить тест с разными профилями? - PullRequest
3 голосов
/ 12 июля 2020

Вот классический пример теста, управляемого данными JUnit 5.

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;

@Slf4j
@ExtendWith(SpringExtension.class)
@SpringBootTest
class ScrathTest {
  @Autowired
  private MyBean myBean;

  @ParameterizedTest
  @ValueSource(ints = {1, 3, 5, -3, 15, Integer.MAX_VALUE}) // six numbers
  void isOdd_ShouldReturnTrueForOddNumbers(int number) {
    myBean.doSomeThing(number)
  }
}

Но что, если мне нужно запустить это не для целочисленного массива, а для массива профилей? Я имею в виду, что я создаю один тест и 3 тестовых профиля, а затем повторяю этот тест 3 раза с разными профилями для каждой инновации. Возможно ли это?

Примечание

@ActiveProfile аннотация не является решением, потому что она просто активирует перечисленные профили без повторения теста и воссоздания контекста.

1 Ответ

1 голос
/ 12 июля 2020

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

class abstract AbstactScrathTest {

  @Autowired
  protected MyBean myBean;

  @ParameterizedTest
  @ValueSource(ints = {1, 3, 5, -3, 15, Integer.MAX_VALUE}) // six numbers
  void isOdd_ShouldReturnTrueForOddNumbers(int number) {
    myBean.doSomeThing(number)
  }

}

@Slf4j
@ExtendWith(SpringExtension.class)
@SpringBootTest
@ActiveProfiles("test1")
class ScrathTestWithTestProfile1 extends AbstractScrathTest{
}


@Slf4j
@ExtendWith(SpringExtension.class)
@SpringBootTest
@ActiveProfiles("test2")
class ScrathTestWithTestProfile2 extends AbstractScrathTest{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...