Тестирование Spring Boot приложений
Приложение Spring Boot - это Spring ApplicationContext, поэтому ничего особенного не нужно делать, чтобы протестировать его, кроме того, что вы обычно делаете с обычным контекстом Spring.
Внешние свойства, ведение журнала и другие функции Spring Boot устанавливаются в контексте по умолчанию, только если вы используете SpringApplication для его создания.
Spring Boot предоставляет аннотацию @SpringBootTest, которую можно использовать в качестве альтернативы стандартной аннотации spring-test @ContextConfiguration, когда вам нужны функции Spring Boot. Аннотация работает, создавая ApplicationContext, используемый в ваших тестах, через SpringApplication. В дополнение к @SpringBootTest также предусмотрен ряд других аннотаций для тестирования более специфических фрагментов приложения.
Если вы используете JUnit 4, не забудьте также добавить @RunWith(SpringRunner.class) в ваш тест, иначе аннотации будут проигнорированы. Если вы используете JUnit 5, нет необходимости добавлять эквивалент @ExtendWith(SpringExtension.class) в качестве @SpringBootTest, а остальные @… аннотации теста уже аннотированы с ним.
По умолчанию @SpringBootTest не запускает сервер. Вы можете использовать атрибут webEnvironment @SpringBootTest для дальнейшего уточнения того, как выполняются ваши тесты:
- MOCK (по умолчанию): загружает веб ApplicationContext и предоставляет фиктивную веб-среду. Встроенные серверы не запускаются при использовании этой аннотации. Если веб-среда недоступна на вашем пути к классам, этот режим прозрачно возвращается к созданию обычного не веб ApplicationContext. Его можно использовать вместе с @AutoConfigureMockMvc или @AutoConfigureWebTestClient для тестового тестирования вашего веб-приложения.
- RANDOM_PORT: загружает WebServerApplicationContext и предоставляет реальную веб-среду. Встроенные серверы запускаются и прослушивают случайный порт.
- DEFINED_PORT: загружает WebServerApplicationContext и предоставляет реальную веб-среду. Встроенные серверы запускаются и прослушивают определенный порт (из вашего application.properties) или порт 8080 по умолчанию.
- NONE: загружает ApplicationContext с помощью SpringApplication, но не предоставляет какой-либо веб-среды (фиктивной или иной).
Если ваш тест является @Transactional, он по умолчанию откатывает транзакцию в конце каждого метода тестирования. Однако, поскольку использование этого соглашения с RANDOM_PORT или DEFINED_PORT неявно обеспечивает реальную среду сервлета, HTTP-клиент и сервер работают в отдельных потоках и, таким образом, в отдельных транзакциях. Любая транзакция, инициированная на сервере, в этом случае не откатывается.
@SpringBootTest с webEnvironment = WebEnvironment.RANDOM_PORT также запустит сервер управления на отдельном случайном порте, если ваше приложение использует другой порт для сервера управления.
Читайте также:
- Spring Boot: тестирование
- Spring Boot: тестирование Spring приложений
- Spring Boot: тестирование, зависимости области тестов
Комментарии
Отправить комментарий