0


在 Spring 中编写单元测试

单元测试是软件开发过程中不可或缺的一部分,它能有效地提高代码质量,确保代码功能的正确性。在 Spring 应用中,JUnit 和 Mockito 是常用的单元测试工具,而 Spring Test 提供了丰富的测试支持。本文将介绍如何在 Spring 中使用 JUnit、Mockito 和 Spring Test 进行单元测试。

1. 引入必要的依赖

首先,在

pom.xml

文件中添加 JUnit、Mockito 和 Spring Test 的依赖:

<dependencies><!-- JUnit 5 依赖 --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>5.8.1</version><scope>test</scope></dependency><!-- Mockito 依赖 --><dependency><groupId>org.mockito</groupId><artifactId>mockito-core</artifactId><version>4.0.0</version><scope>test</scope></dependency><!-- Spring Test 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>2.5.6</version><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency></dependencies>

2. 使用 JUnit 编写单元测试

JUnit 是最流行的 Java 单元测试框架。我们将使用 JUnit 5 编写一个简单的单元测试。

假设我们有一个

CalculatorService

类:

publicclassCalculatorService{publicintadd(int a,int b){return a + b;}publicintsubtract(int a,int b){return a - b;}}

我们可以为其编写如下测试类:

importorg.junit.jupiter.api.Test;importstaticorg.junit.jupiter.api.Assertions.assertEquals;publicclassCalculatorServiceTest{privatefinalCalculatorService calculatorService =newCalculatorService();@TestpublicvoidtestAdd(){assertEquals(5, calculatorService.add(2,3));}@TestpublicvoidtestSubtract(){assertEquals(1, calculatorService.subtract(3,2));}}

3. 使用 Mockito 进行单元测试

Mockito 是一个用于创建模拟对象的流行框架,特别适用于测试依赖注入的类。假设我们有以下

UserService

类和

UserRepository

接口:

publicinterfaceUserRepository{UserfindByUsername(String username);}publicclassUserService{privateUserRepository userRepository;publicUserService(UserRepository userRepository){this.userRepository = userRepository;}publicUsergetUserByUsername(String username){return userRepository.findByUsername(username);}}

我们可以使用 Mockito 为

UserService

编写单元测试:

importorg.junit.jupiter.api.BeforeEach;importorg.junit.jupiter.api.Test;importorg.mockito.Mockito;importstaticorg.junit.jupiter.api.Assertions.assertEquals;importstaticorg.mockito.Mockito.when;publicclassUserServiceTest{privateUserRepository userRepository;privateUserService userService;@BeforeEachpublicvoidsetUp(){
        userRepository =Mockito.mock(UserRepository.class);
        userService =newUserService(userRepository);}@TestpublicvoidtestGetUserByUsername(){User user =newUser("john_doe");when(userRepository.findByUsername("john_doe")).thenReturn(user);User result = userService.getUserByUsername("john_doe");assertEquals("john_doe", result.getUsername());}}

4. 使用 Spring Test 进行单元测试

Spring Test 提供了对 Spring 应用的全面测试支持。通过

@SpringBootTest

注解,可以加载整个 Spring 应用的上下文进行集成测试。

假设我们有一个简单的 Spring Boot 应用,包括

UserController

UserService

importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;@RestControllerpublicclassUserController{@AutowiredprivateUserService userService;@GetMapping("/user")publicUsergetUser(@RequestParamString username){return userService.getUserByUsername(username);}}

我们可以使用 Spring Test 编写如下测试类:

importorg.junit.jupiter.api.Test;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;importorg.springframework.boot.test.context.SpringBootTest;importorg.springframework.test.web.servlet.MockMvc;importorg.springframework.test.web.servlet.request.MockMvcRequestBuilders;importorg.springframework.test.web.servlet.result.MockMvcResultMatchers;@SpringBootTest@AutoConfigureMockMvcpublicclassUserControllerTest{@AutowiredprivateMockMvc mockMvc;@TestpublicvoidtestGetUser()throwsException{
        mockMvc.perform(MockMvcRequestBuilders.get("/user").param("username","john_doe")).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.jsonPath("$.username").value("john_doe"));}}

结论

通过本文的介绍,我们了解了如何在 Spring 应用中使用 JUnit、Mockito 和 Spring Test 进行单元测试。JUnit 提供了基础的测试框架,Mockito 允许我们方便地创建模拟对象,而 Spring Test 则提供了对 Spring 应用的全面测试支持。

标签: spring 单元测试

本文转载自: https://blog.csdn.net/FireFox1997/article/details/140170268
版权归原作者 firepation 所有, 如有侵权,请联系我们删除。

“在 Spring 中编写单元测试”的评论:

还没有评论