Самый простой подход - TestRestTemplate
.
Тестирование с TestRestTemplate и @ SpringBootTest
Один из самых простых способов проверить, что вы пытаетесь сделать. Он запускает все приложение Spring Boot и дает вам возможность взаимодействовать с REST Api через TestRestTemplate
.
Вам необходимо настроить проекты с некоторыми зависимостями maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
Затем создайте класс Test. Этот класс запустит ваше приложение Spring Boot и выполнит ваши тесты.
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class ApplicationTest {
@Autowired
private TestRestTemplate testRestTemplate;
@Test
void testApplication() {
int resourceId = 3;
ResponseEntity<MyResponseObject> response = testRestTemplate.getForEntity("/myEndPoint/{resourceId}", MyResponseObject, resourceId);
assertThat(response.getStatusCode()).isEqualTo(200);
MyResponseObject body = response.getBody();
// then do what you want
}
}
И в основном это все. Вот что нужно учитывать:
@SpringBootTest
будет искать вашу аннотированную @SpringBootApplication
или @SpringBootConfiguration
. Затем он загрузит все, что у вас есть (включая услуги и доступ к h2). SpringBootTest.WebEnvironment.RANDOM_PORT
запустит ваш сервер через любой доступный порт на вашем компьютере. После этого вы можете одновременно запускать много экземпляров. - Добавив h2 к пути к классам в тестовой среде, Spring автоматически создаст источник данных для связи с вашей базой данных h2. Нет необходимости в дополнительной настройке (обычно я имею в виду). Spring Boot автоматически предоставляет
TestRestTemplate
. Как вы заметили в моих тестах, я не предоставляю ни хост, ни порт моего тестируемого приложения SpringBoot. Spring автоматически подключается к хорошему серверу ... Magi c.
Если вы хотите обучиться, следуйте этому: https://www.baeldung.com/spring-boot-testresttemplate. Если вы хотите получить документы Spring Boot Test, выполните следующие действия: https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot -features-testing-spring-boot-Applications
Когда следует использовать TestRestTemplate
:
- Когда вы тестируете на всех уровнях вашего приложения
- Когда вы хотите, чтобы тест был очень близок к тому, что вы будете иметь в производстве
Когда не следует:
- Когда приложение слишком долго для запуска. Так как он загружает все о ваших приложениях, если запуск обычно занимает 20 секунд, то выполнение ваших тестов займет не менее 20 секунд. Это очень долго.
- Когда у вас есть зависимости от системы, которую вы вообще не контролируете, вы должны также использовать
@MockBean
. Это не серебряная пуля. Он может работать на вашей локальной машине, но не на вашем CI-сервере, например. Будьте осторожны с этим.
Тестирование с помощью Mock Mvc
С помощью MockMvc
вы также можете смоделировать тест для вашего контроллера, вы можете смоделировать запрос. Это более строгое ограничение, чем глобальный @SpringBootTest
, поскольку вы запускаете не все приложения, а лишь небольшую часть, предназначенную для тестирования уровня веб-контроллера. В большинстве случаев вы не используете его для тестирования всех слоев вашего приложения, а только веб-части, высмеивая остальные.
Всегда есть способ протестировать все слои, но ясно, что вам нужно добавить класс, который вы хотите запустить самостоятельно.
Если вы хотите посмотреть, как это выглядит, go отметьте это: https://www.baeldung.com/integration-testing-in-spring
Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать.