Комплексное тестирование приложений с помощью @SpringBootTest

При разработке приложения Spring Boot необходимо тщательное тестирование, чтобы гарантировать его надежность и функциональность. Аннотация @SpringBootTestпредоставляет мощный механизм для комплексного тестирования всего приложения. В этой статье мы рассмотрим различные методы и примеры кода для тестирования приложения Spring Boot с использованием @SpringBootTest.

Метод 1: тестирование с помощью MockMvc

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerTest {
    @Autowired
    private MockMvc mockMvc;
    @Test
    public void testGetUserById() throws Exception {
        mockMvc.perform(get("/users/{id}", 1))
               .andExpect(status().isOk())
               .andExpect(jsonPath("$.id").value(1))
               .andExpect(jsonPath("$.name").value("John Doe"));
    }
}

Метод 2: тестирование с помощью TestRestTemplate

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 static org.junit.jupiter.api.Assertions.assertEquals;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class UserControllerTest {
    @LocalServerPort
    private int port;
    @Autowired
    private TestRestTemplate restTemplate;
    @Test
    public void testGetUserById() {
        User user = restTemplate.getForObject("http://localhost:" + port + "/users/1", User.class);
        assertEquals(1, user.getId());
        assertEquals("John Doe", user.getName());
    }
}

Метод 3. Тестирование с помощью @DataJpaTest

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import static org.junit.jupiter.api.Assertions.assertEquals;
@DataJpaTest
public class UserRepositoryTest {
    @Autowired
    private UserRepository userRepository;
    @Test
    public void testFindById() {
        User user = new User(1, "John Doe");
        userRepository.save(user);
        User foundUser = userRepository.findById(1).orElse(null);
        assertEquals(user.getName(), foundUser.getName());
    }
}

В этой статье мы рассмотрели различные методы тестирования приложения Spring Boot с использованием аннотации @SpringBootTest. Мы рассмотрели тестирование с помощью MockMvc, TestRestTemplate и @DataJpaTest, предоставив примеры кода для каждого метода. Используя эти методы тестирования, разработчики могут обеспечить надежность и правильность своих приложений Spring Boot.