【讲解下Spring Boot单元测试】

🌈个人主页: 程序员不想敲代码啊
🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家
👍点赞⭐评论⭐收藏
🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步!

🌠Spring Boot单元测试

🌠Spring Boot提供一个非常方便的方式来写单元测试,它利用了Spring Test中的功能,允许你很容易地测试Spring应用程序中的各个组件。

🌠首先,你需要为你的项目添加Spring Boot Starter Test依赖。对于Maven项目,你需要在pom.xml中添加以下依赖:

xml 复制代码
<dependencies>
    <!-- 其它依赖... -->

    <!-- Spring Boot Starter Test依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

🌠对于Gradle项目,你需要在build.gradle文件中添加以下依赖:

gradle 复制代码
dependencies {
    // 其它依赖...

    // 测试依赖
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

🌠下面提供一个简单的单元测试示例,假设你有一个Spring Boot应用程序中的服务类,我们可以进行单元测试:

java 复制代码
@Service
public class CalculatorService {
    public int add(int a, int b) {
        return a + b;
    }
}

🌠对于上述的CalculatorService类,一个简单的单元测试会是这样的:

java 复制代码
import static org.assertj.core.api.Assertions.assertThat;

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.mock.mockito.MockBean;

@SpringBootTest
public class CalculatorServiceTest {

    @Autowired
    private CalculatorService calculatorService;

    @Test
    public void testAdd() {
        // Arrange (准备阶段)
        int numberA = 10;
        int numberB = 20;

        // Act (行动阶段)
        int result = calculatorService.add(numberA, numberB);

        // Assert (断言阶段)
        assertThat(result).isEqualTo(30);
    }
}

🌠在上述例子中,@SpringBootTest注解创建了一个应用程序上下文,这在进行集成测试时是有用的。但如果只是单纯的单元测试一个组件,并不需要完整的上下文,可以用@ExtendWith(SpringExtension.class)代替以提升测试速度。

🌠对于需要测试Spring MVC控制器的情况,你可以使用MockMvc来模拟HTTP请求和断言响应:

java 复制代码
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;

import org.junit.jupiter.api.BeforeEach;
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;

@SpringBootTest
@AutoConfigureMockMvc
public class WebLayerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void shouldReturnDefaultMessage() throws Exception {
        this.mockMvc.perform(get("/"))
                .andExpect(status().isOk())
                .andExpect(content().string("Hello World"));
    }
}

🌠在这个示例中,@AutoConfigureMockMvc@SpringBootTest被用来注入一个MockMvc实例,然后我们使用这个实例来执行一个HTTP GET请求,并断言结果。这种测试方式更接近于真实的HTTP请求,但它依然运行在服务器未启动的情况下。

🌠最后,正确的单元测试不应该依赖Spring框架或是任何外部服务/数据库等,这些是集成测试的范畴。对于单元测试,你应该尽可能地模拟你的依赖,使得每个测试小而快,并只关注一个特定的组件。

相关推荐
老华带你飞19 分钟前
电商系统|基于java + vue电商系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
程序媛徐师姐44 分钟前
Java基于SpringBoot的智能城市管理平台,附源码+文档说明
java·spring boot·java springboot·智能城市管理平台·java智能城市管理平台·java智能城市管理·智能城市管理
李慕婉学姐1 小时前
【开题答辩过程】以《婴幼儿辅食健康监测与反馈系统》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·spring boot
默 语1 小时前
Spring Boot 3.x升级踩坑记:到底值不值得升级?
hive·spring boot·后端
悟能不能悟1 小时前
springboot controller返回的是HttpServletResponse成功返回excel文件流,失败就返回失败参数
spring boot·后端·excel
李慕婉学姐2 小时前
【开题答辩过程】以《智慧校园创新互助小程序的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·spring boot·小程序
老华带你飞3 小时前
房屋租赁管理系统|基于java+ vue房屋租赁管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
qq_12498707534 小时前
基于微信小程序的校园跑腿系统的设计与实现(源码+论文+部署+安装)
spring boot·微信小程序·小程序·毕业设计·计算机毕业设计
有一个好名字4 小时前
Spring Boot 依赖注入指南:多种方式深度剖析与代码演示
java·服务器·spring boot
悟空码字4 小时前
SpringBoot 整合 Nacos,让微服务像外卖点单一样简单
java·spring boot·后端