Как заменить аннотацию @Rule в Junit 5? - PullRequest
0 голосов
/ 24 июня 2018

Я использую Wiremock в своих тестах и ​​имею такую ​​строку кода:

@Rule
public WireMockRule wireMockRule = new WireMockRule(8080);

Я хочу переключиться на Junit 5. Поэтому я добавил следующую зависимость (используя gradle):

testCompile('org.junit.jupiter:junit-jupiter-engine:5.1.1')

Но нет никаких предложений, когда я пытаюсь импортировать аннотацию @Rule.Нужно ли добавить еще один модуль зависимости junit?Или правила не поддерживаются в Junit5?Если нет, то как я могу заменить аннотацию @Rule, чтобы тесты снова работали?Спасибо.

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Аннотации JUnit 4 @Rule и @ClassRule не существуют в JUnit 5. По существу, существует новая модель расширений, которую можно использовать для реализации расширений с той же функциональностью. Эти расширения могут использоваться с аннотацией @ExtendWith.

Существует ограниченная поддержка миграции для подмножества правил JUnit 4 в модуле junit-jupiter -igrationsupport . К сожалению, он ограничен только подклассами ExternalResource и Verifier.

Прежде чем Wiremock получит официальную поддержку JUnit, у вас есть несколько обходных путей:

  1. Выполните тесты JUnit 4 параллельно с тестами JUnit 5 с junit-vintage-engine .
  2. Запустите и остановите сервер самостоятельно в тестовом коде.
  3. Используйте стороннее расширение, например wiremock-junit5 или wiremock-extension .
0 голосов
/ 24 июня 2018

В общем, то, что вы сделали с @Rule и @ClassRule в JUnit 4, должно быть сделано с @ExtendWith и Extension, которые связаны оченьФункция закрытия в JUnit 5.
Он работает как стандартные ловушки жизненного цикла JUnit, но извлекается из класса Extension.Аналогично @Rule для тестового класса может быть добавлено столько Extension, сколько требуется.

Для решения этой проблемы у вас есть несколько возможных подходов:

  • сохранить путь JUnit 4 (JUnit 5 владеет частью JUnit Vintage, которая позволяет выполнять тесты JUnit 3 или 4).
  • переписать @Rule как Extension.
  • выполняет фактическую обработку, выполняемую WireMockRule (запускает сервер, выполняет ваши тесты и останавливает сервер) в каждом тесте класса с помощью @BeforeEach и @AfterEach методов подключения.
  • используйте третью библиотеку, которая реализует эквивалент WireMockRule в способе расширения JUnit 5, например https://github.com/lanwen/wiremock-junit5

Обратите внимание, что ваша проблема уже обсуждалась в Проблемы JUnit 5.

...