Springboot中JUNIT5单元测试+Mockito详解

简介: Springboot中JUNIT5单元测试+Mockito详解

Springboot中JUNIT5单元测试+Mockito详解

 

单元测试是软件开发中不可或缺的一部分,它可以帮助我们确保代码的正确性和稳定性。JUnit 5是Java生态系统中广泛使用的测试框架,而Mockito则是一个流行的Java模拟框架,用于编写测试的辅助工具。在Spring Boot项目中,结合使用JUnit 5和Mockito,可以大大提高单元测试的效率和覆盖率。本文将详细介绍如何在Spring Boot项目中使用JUnit 5和Mockito进行单元测试。

 

一、环境准备

 

首先,我们需要在Spring Boot项目中添加JUnit 5和Mockito的依赖。在`pom.xml`中添加以下依赖:

 

```xml
<dependencies>
    <!-- JUnit 5 -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.7.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.7.0</version>
        <scope>test</scope>
    </dependency>
    <!-- Mockito -->
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>3.6.28</version>
        <scope>test</scope>
    </dependency>
    <!-- Spring Boot Test -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <version>2.4.2</version>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>
```

 

二、创建示例项目

 

假设我们有一个简单的Spring Boot应用,包含一个Service层和Controller层。我们将为Service层和Controller层编写单元测试。

 

1. 创建Service层

 

创建一个简单的Service类,`UserService`:

 

```java
@Service
public class UserService {
 
    public String getUserById(int id) {
        return "User" + id;
    }
}
```

 

2. 创建Controller层

 

创建一个Controller类,`UserController`:

 

```java
@RestController
@RequestMapping("/users")
public class UserController {
 
    @Autowired
    private UserService userService;
 
    @GetMapping("/{id}")
    public ResponseEntity<String> getUserById(@PathVariable int id) {
        return ResponseEntity.ok(userService.getUserById(id));
    }
}
```

 

三、编写单元测试

 

1. 测试Service层

 

使用JUnit 5和Mockito测试`UserService`。

 

```java
@ExtendWith(MockitoExtension.class)
public class UserServiceTest {
 
    @InjectMocks
    private UserService userService;
 
    @Test
    public void testGetUserById() {
        String result = userService.getUserById(1);
        assertEquals("User1", result);
    }
}
```

 

2. 测试Controller层

 

使用JUnit 5、Mockito和Spring Boot Test测试`UserController`。

 

```java
@ExtendWith(SpringExtension.class)
@WebMvcTest(UserController.class)
public class UserControllerTest {
 
    @Autowired
    private MockMvc mockMvc;
 
    @MockBean
    private UserService userService;
 
    @Test
    public void testGetUserById() throws Exception {
        when(userService.getUserById(1)).thenReturn("User1");
 
        mockMvc.perform(get("/users/1"))
               .andExpect(status().isOk())
               .andExpect(content().string("User1"));
    }
}
```

 

3. 测试Rest API

 

可以进一步编写测试来覆盖更多的REST API,例如:

 

```java
@ExtendWith(SpringExtension.class)
@WebMvcTest(UserController.class)
public class UserControllerTest {
 
    @Autowired
    private MockMvc mockMvc;
 
    @MockBean
    private UserService userService;
 
    @Test
    public void testGetUserById() throws Exception {
        when(userService.getUserById(1)).thenReturn("User1");
 
        mockMvc.perform(get("/users/1"))
               .andExpect(status().isOk())
               .andExpect(content().string("User1"));
    }
 
    @Test
    public void testGetUserNotFound() throws Exception {
        when(userService.getUserById(2)).thenReturn(null);
 
        mockMvc.perform(get("/users/2"))
               .andExpect(status().isNotFound());
    }
}
```

 

四、总结

 

通过结合使用JUnit 5和Mockito,可以有效地为Spring Boot应用编写单元测试。本文详细介绍了如何设置项目依赖、创建示例项目以及编写单元测试的方法。希望通过这些示例,能帮助你更好地理解和使用JUnit 5和Mockito进行单元测试。

 

当编写单元测试时,还有一些额外的注意事项和技巧可以帮助你更好地进行测试:

 

1. **测试覆盖率**:确保你的单元测试覆盖了尽可能多的代码路径,以确保代码的完整性和稳定性。

 

2. **参数化测试**:JUnit 5支持参数化测试,可以用不同的参数运行相同的测试方法,从而减少重复代码。

 

3. **Mockito高级用法**:除了简单的模拟对象外,Mockito还支持更高级的用法,如模拟方法调用链、验证方法调用次数等。

 

4. **集成测试**:除了单元测试外,还可以编写集成测试来测试多个组件之间的交互。

 

5. **异常测试**:确保你的代码正确处理了各种异常情况,编写异常测试可以帮助你验证这一点。

 

6. **测试命名规范**:为了方便管理和理解,建议为每个测试方法取一个具有描述性的名称,以便其他人能够快速了解测试的目的。

 

7. **持续集成**:将单元测试集成到持续集成(CI)工作流程中,确保每次代码提交都能自动运行单元测试。

 

8. **测试代码质量**:与生产代码一样,测试代码也需要保持良好的质量,包括可读性、可维护性和可扩展性。

 

目录
相关文章
|
9月前
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
987 0
|
5月前
|
Java 测试技术 数据库连接
【SpringBoot(四)】还不懂文件上传?JUnit使用?本文带你了解SpringBoot的文件上传、异常处理、组件注入等知识!并且带你领悟JUnit单元测试的使用!
Spring专栏第四章,本文带你上手 SpringBoot 的文件上传、异常处理、组件注入等功能 并且为你演示Junit5的基础上手体验
1036 3
|
9月前
|
人工智能 Java 测试技术
SpringBoot 测试实践:单元测试与集成测试
在 Spring Boot 测试中,@MockBean 用于创建完全模拟的 Bean,替代真实对象行为;而 @SpyBean 则用于部分模拟,保留未指定方法的真实实现。两者结合 Mockito 可灵活控制依赖行为,提升测试覆盖率。合理使用 @ContextConfiguration 和避免滥用 @SpringBootTest 可优化测试上下文加载速度,提高测试效率。
443 5
|
8月前
|
Java 测试技术 Spring
简单学Spring Boot | 博客项目的测试
本内容介绍了基于Spring Boot的博客项目测试实践,重点在于通过测试驱动开发(TDD)优化服务层代码,提升代码质量和功能可靠性。案例详细展示了如何为PostService类编写测试用例、运行测试并根据反馈优化功能代码,包括两次优化过程。通过TDD流程,确保每项功能经过严格验证,增强代码可维护性与系统稳定性。
325 0
|
Java 测试技术 开发者
必学!Spring Boot 单元测试、Mock 与 TestContainer 的高效使用技巧
【10月更文挑战第18天】 在现代软件开发中,单元测试是保证代码质量的重要手段。Spring Boot提供了强大的测试支持,使得编写和运行测试变得更加简单和高效。本文将深入探讨Spring Boot的单元测试、Mock技术以及TestContainer的高效使用技巧,帮助开发者提升测试效率和代码质量。
1320 2
|
9月前
|
Java 测试技术 数据库
说一说 SpringBoot 整合 Junit5 常用注解
我是小假 期待与你的下一次相遇 ~
123 1
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生体质测试管理系统设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
Java 测试技术 应用服务中间件
Spring Boot 如何测试打包部署
本文介绍了 Spring Boot 项目的开发、调试、打包及投产上线的全流程。主要内容包括: 1. **单元测试**:通过添加 `spring-boot-starter-test` 包,使用 `@RunWith(SpringRunner.class)` 和 `@SpringBootTest` 注解进行测试类开发。 2. **集成测试**:支持热部署,通过添加 `spring-boot-devtools` 实现代码修改后自动重启。 3. **投产上线**:提供两种部署方案,一是打包成 jar 包直接运行,二是打包成 war 包部署到 Tomcat 服务器。
397 10
|
安全 Java 测试技术
springboot之SpringBoot单元测试
本文介绍了Spring和Spring Boot项目的单元测试方法,包括使用`@RunWith(SpringJUnit4ClassRunner.class)`、`@WebAppConfiguration`等注解配置测试环境,利用`MockMvc`进行HTTP请求模拟测试,以及如何结合Spring Security进行安全相关的单元测试。Spring Boot中则推荐使用`@SpringBootTest`注解简化测试配置。
510 4
|
Java 测试技术 API
详解Swagger:Spring Boot中的API文档生成与测试工具
详解Swagger:Spring Boot中的API文档生成与测试工具
1116 4

热门文章

最新文章