Привет! Итак, вы хотите научиться тестировать контроллеры Spring MVC? Что ж, вы пришли в нужное место. В этой статье я познакомлю вас с несколькими методами тестирования контроллеров Spring MVC, используя простой язык и попутно предоставляя примеры кода. Давайте сразу же приступим!
- Модульное тестирование с помощью MockMvc:
Один из наиболее распространенных способов тестирования контроллеров Spring MVC — использование платформы MockMvc. MockMvc позволяет моделировать HTTP-запросы и проверять ответы, возвращаемые вашими контроллерами. Вот простой пример:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@WebMvcTest(HomeController.class)
public class HomeControllerUnitTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testHomePage() throws Exception {
mockMvc.perform(get("/"))
.andExpect(status().isOk());
}
}
В этом примере мы тестируем конечную точку /класса HomeControllerи ожидаем ответа HTTP 200 OK.
- Интеграционное тестирование с помощью TestRestTemplate:
Если вы хотите протестировать свои контроллеры более интегрированным образом, вы можете использоватьTestRestTemplate. Этот класс позволяет вам отправлять HTTP-запросы в ваше приложение и получать фактические ответы. Вот пример:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.web.server.LocalServerPort;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class HomeControllerIntegrationTest {
@LocalServerPort
private int port;
@Autowired
private TestRestTemplate restTemplate;
@Test
public void testHomePage() {
ResponseEntity<String> response = restTemplate.getForEntity("http://localhost:" + port + "/", String.class);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
}
}
В этом примере мы используем TestRestTemplateдля отправки запроса GET на корневой URL-адрес нашего приложения и подтверждения того, что код состояния ответа равен 200.
- Тестирование параметров запроса и тела запроса.
В некоторых случаях вам может потребоваться протестировать контроллеры, которые полагаются на параметры запроса или тела запроса. Вот пример того, как этого можно добиться с помощью MockMvc:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
@WebMvcTest(UserController.class)
public class UserControllerUnitTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testCreateUser() throws Exception {
mockMvc.perform(post("/users")
.param("name", "John Doe")
.param("age", "25")
.contentType(MediaType.APPLICATION_JSON)
.content("{\"email\":\"johndoe@example.com\"}"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.name").value("John Doe"));
}
}
В этом примере мы тестируем конечную точку createUserкласса UserController, передавая параметры запроса и тело запроса JSON, а также утверждая, что статус ответа — «ОК». и возвращенный JSON содержит ожидаемое значение имени.
Это всего лишь несколько примеров того, как можно протестировать контроллеры Spring MVC. Помните, что важно охватить в тестах различные сценарии и крайние случаи, чтобы обеспечить надежность вашего приложения. Приятного тестирования!