В модульном тесте, какие различия между @Runwith(SpringRunner.class)
& @SpringBootTest
?
Можете ли вы объяснить мне варианты использования каждого из них?
В модульном тесте, какие различия между @Runwith(SpringRunner.class)
& @SpringBootTest
?
Можете ли вы объяснить мне варианты использования каждого из них?
Ответы:
@RunWith (SpringRunner.class): вам нужна эта аннотация, чтобы просто включить функции весенней загрузки, такие как @Autowire
и @MockBean
т. Д. Во время тестирования junit
используется для обеспечения связи между функциями тестирования Spring Boot и JUnit. Всякий раз, когда мы используем какие-либо функции тестирования Spring Boot в наших тестах JUnit, эта аннотация потребуется.
@SpringBootTest: эта аннотация используется для загрузки полного контекста приложения для сквозного тестирования интеграции
Аннотация @SpringBootTest может использоваться, когда нам нужно загрузить весь контейнер. Аннотация работает путем создания ApplicationContext, который будет использоваться в наших тестах.
Вот статья с четкими примерами обоих сценариев Baeldung
От spring.io :
@RunWith(SpringRunner.class)
сообщает JUnit о запуске с использованием поддержки тестирования Spring.SpringRunner
это новое имя дляSpringJUnit4ClassRunner
, это просто немного на глаз.
@SpringBootTest
говорит «начальная загрузка с поддержкой Spring Boot» (например, загрузитеapplication.properties
и дайте мне все прелести Spring Boot)
Так что если вам не нужно все, что загружает Spring Boot для интеграционного теста, вам может не понадобиться @SpringBootTest
@RunWith - это старая аннотация из JUnit 4 для использования тестовых бегунов. Если вы используете JUnit 5 (Jupiter), вы должны использовать @ExtendWith для использования расширений JUnit
«Если вы используете JUnit 4, не забудьте также добавить @RunWith (SpringRunner.class) в ваш тест, иначе аннотации будут игнорироваться. Если вы используете JUnit 5, нет необходимости добавлять эквивалент @ExtendWith ( SpringExtension.class) как @SpringBootTest и другие @… аннотации к тесту уже аннотированы.