Spring Boot 单元测试 0基础教程

咱们以一种通俗易懂的方式,通过一个简单的实例来教你怎么在Spring Boot项目中进行单元测试。

假设你有一个简单的Spring Boot应用,里面有一个UserService接口,以及它的实现类 UserServiceImpl,这个服务有一个方法用来获取用户的问候语。

java 复制代码
// UserService.java
public interface UserService {
    String sayHelloTo(String name);
}

// UserServiceImpl.java
@Service
public class UserServiceImpl implements UserService {

    @Override
    public String sayHelloTo(String name) {
        return "Hello, " + name + "!";
    }
}

为了对该方法进行单元测试,我们可以创建一个对应的测试类。首先,确保你的项目包含了Spring Boot Test的依赖项,通常在build.gradle或pom.xml里添加如下依赖:

XML 复制代码
// Maven构建脚本(pom.xml)
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

然后,创建一个名为UserServiceTest的测试类:

java 复制代码
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;

@SpringBootTest(classes = YourApplication.class)
public class UserServiceTest {

    @Autowired
    private UserService userService; // 被测试的真实服务对象注入

    @MockBean
    private UserService mockUserService; // 创建模拟的服务对象,用于某些特定场景

    @Test
    public void testSayHelloTo() {
        // 对真实服务对象的测试
        String result = userService.sayHelloTo("Spring Boot");
        assertEquals("Hello, Spring Boot!", result);

        // 对模拟服务对象的测试(可选,用于模拟复杂依赖场景)
        Mockito.when(mockUserService.sayHelloTo(Mockito.anyString())).thenReturn("Hi there!");

        String mockedResult = mockUserService.sayHelloTo("Unit Tester");
        assertEquals("Hi there!", mockedResult);
    }
}

@SpringBootTest注解告诉Spring Boot要启动一个微型应用上下文来进行测试,其中包含你的主类YourApplication。

• @Autowired注解用于将真实的UserService实例注入到测试类中,这样可以直接测试真实的服务实现。

• @MockBean则创建了一个模拟的UserService对象,当我们的服务有很多依赖项,而又不想真正调用那些依赖时,可以使用模拟对象替代。

• @Test注解标记了一个测试方法,这里我们测试了sayHelloTo方法,使用assertEquals方法来验证实际结果是否与预期相符。

通过这个基础的例子,你应该对外如何在Spring Boot应用中编写单元测试有了初步的认识。实际工作中,单元测试还会涉及到数据库操作、REST API接口调用等各种更复杂的场景,但基本原则都是:为被测试代码设置合理的输入,调用方法,然后验证输出是否符合预期。

你学废了吗?

相关推荐
AI开源软件28 分钟前
SpringBoot3+AI Agent 智能报销:怎样把对话接进现有财务审批系统
spring boot·ai agent·人工确认·ruoyi office·agentos·智能报销·财务审批
SL_staff35 分钟前
JVS-APS有限产能建模的七个刚性支点:面向产线真实约束的技术实现解析
java·开源·全栈
特立独行的猫A36 分钟前
少 3 个环节、少 1 次 ABI、少 3500 行代码:cj-tauri 与 Ionic/Capacitor 的鸿蒙桥接机制对比
java·后端·python
学长毕设1 小时前
基于SpringBoot的高校后勤报修管理系统-附源码
java·spring boot·后端
特立独行的猫A1 小时前
cj-tauri vs Rust/Tauri 同款播放器实测:编译 21 秒 vs 11 分钟,磁盘 12 MB vs 1.2 GB
java·后端·python
杨凯凡2 小时前
Spring AI RAG 实战:向量检索、租户过滤、引用溯源与防幻觉边界
java·人工智能·spring
小科先生2 小时前
Java springboot调用数据库的基本流程
java·数据库·spring boot
秋饼3 小时前
GPT-Live 全双工语音 API Java 服务端落地实战:事件协议、会话恢复与生产踩坑
java·ai·技术分享·后端开发
SL_staff3 小时前
为什么企业级自动化不能只靠AI编排?——逻辑引擎在确定性业务场景中的不可替代性
java·开源·产品
Pniubi4 小时前
MySQL靠什么实现事务的?事务隔离级别有哪些?
java·数据库·mysql