#spring-boot #annotations #junit4 #junit5
#весенняя загрузка #примечания #junit4 #junit5
Вопрос:
Мы с моей командой работали над множеством микросервисов, используя Spring boot. Поскольку сервисы прошли через обновления JUnit и Spring Boot (сейчас мы используем Spring Boot 2 и JUnit 5), разные JUnit, реализованные разными разработчиками, теперь используют разные шаблоны с:
- @ExtendWith
- @RunWith
Сегодня в чем разница между ними двумя и действительно ли они нужны нам для наших модульных тестов или встроены в какую-то новую аннотацию Spring Boot?
Ответ №1:
Если вы используете Junit версии < 5, поэтому вам придется использовать @RunWith(SpringRunner.class)
or @RunWith(MockitoJUnitRunner.class)
и т.д.
Если вы используете Junit версии = 5, поэтому вам придется использовать @ExtendWith(SpringExtension.class)
или @ExtendWith(MockitoExtension.class)
и т.д.
Ответ №2:
Ответ можно найти в документации:
Если вы используете JUnit 4, не забудьте добавить @RunWith(SpringRunner.class ) для вашего теста, в противном случае аннотации будут проигнорированы. Если вы используете JUnit 5, нет необходимости добавлять эквивалентный @ExtendWith(SpringExtension.class ) как @SpringBootTest и другой @…Тестовые примечания уже снабжены им
.
Ответ №3:
@RunWith
это старая аннотация из JUnit 4 для использования тестовых запускателей. Если вы используете JUnit 5 (Jupiter), вам следует использовать @ExtendWith
для использования расширений JUnit.
Ответ №4:
Важное отличие, которое было введено с @ExtendWith
, заключается в том, что он может получать массив расширений, позволяющих использовать многие из них в одном тесте. Что-то подобное можно сделать
@ExtendWith({MockitoExtension.class, LogAsserterExtension.class})
class MyTest
@RunWith
Еще в JUnit 4 был разрешен только один класс Runner, и у вас возникали проблемы, когда вы хотели использовать Mockito и параметры в тесте, например, потому что вы не могли использовать MockitoJUnitRunner
и JUnitParamsRunner
одновременно.