В проектах Spring Boot модульное тестирование является решающим звеном. Это не только обеспечивает корректность кода, но также повышает его качество и уменьшает количество ошибок. В этой статье будут подробно представлены базовый процесс модульного тестирования Spring Boot, в том числе способы создания простого проекта Spring Boot, базовые знания по модульному тестированию и способы имитации данных.
Во-первых, нам нужно создать базовый Spring Загрузочный проект。Здесь мы можем использоватьSpring Initializrчтобы быстро создатьSpring Загрузочный проект. Выберите нужные вам зависимости, например Web, JPA и т. д., а затем загрузите сгенерированную структуру проекта.
После завершения загрузки разархивируйте проект и импортируйте его в свою IDE (например, IntelliJ IDEA или Eclipse). На этом этапе настроен базовый проект Spring Boot.
В проектах Spring Boot мы обычно используем JUnit в качестве среды модульного тестирования. JUnit предоставляет множество методов проверки правильности кода. В то же время Spring Boot также предоставляет модуль Spring Test, который позволяет нам легко загружать контейнер Spring при модульном тестировании для тестирования компонентов Spring.
При проведении модульного тестирования нам необходимо обратить внимание на следующие аспекты:
При модульном тестировании нам часто приходится моделировать некоторые внешние данные или поведение, чтобы избежать вмешательства со стороны реальной среды. На данный момент мы можем использовать среду Mock для моделирования данных. В Java обычно используемые платформы Mock включают Mockito и PowerMock.
Вот пример использования Mockito для имитации данных:
Предположим, у нас есть класс UserService, который имеет зависимый интерфейс UserRepository. В тесте UserService мы можем высмеивать поведение UserRepository.
Сначала добавьте зависимость Mockito в свой проект:
<!-- Добавьте зависимость Mockito в pom.xml -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
Затем напишите тестовый класс UserService:
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
@SpringBootTest
public class UserServiceTest {
@Mock
private UserRepository userRepository; // Макет интерфейса UserRepository
@InjectMocks
private UserService userService; // Внедрите класс UserService, который будет использоваться.
@Test
public void testFindUserByName() {
// Имитация метода findByName UserRepository для возврата определенного объекта User.
User mockUser = new User();
mockUser.setName("John Doe");
when(userRepository.findByName(anyString())).thenReturn(mockUser);
// Вызовите метод findUserByName UserService и проверьте результат.
User result = userService.findUserByName("John Doe");
assertEquals("John Doe", result.getName());
}
}
В приведенном выше примере мы используем аннотацию @Mock для создания фиктивного объекта UserRepository и используем метод When для определения поведения фиктивного объекта. Затем мы используем аннотацию @InjectMocks, чтобы создать экземпляр UserService и внедрить в него UserRepository макета. Наконец, мы вызываем метод findUserByName UserService и проверяем, что результаты соответствуют ожиданиям.