Spring Boot 单元测试

学无止境,气有浩然!

文章目录


前言

项目最近引入sonarqube,扫描之后没有代码覆盖率,是因为没有写单元测试,于是需要从头引入单元测试。


单元测试

Spring Boot提供了单元测试的框架,只需要引入。但是麻烦的点是,如果使用这个,Spring Boot就会进行一系列的自动配置,项目上数据库密码的配置是没有在properties文件里配置的,就意味着在单元测试启动就会报错,数据库依赖相关的bean组装失败。

但是,条条大路通罗马。


方式一

如果启动的时候,数据库相关的不让自动配置不就好了。

@SpringBootTest里面有个properties属性,这个配置就跟properties里面是一毛一样的。所以直接排除掉数据库的配置就好了。

java 复制代码
@SpringBootTest(properties = {"spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration"})

又一个问题蹦出来了,在类里@Autowired某个对象的时候,还是回去装配,启动还是会报错,这样你mock注入的bean不会生效,怎么办呢。

可以使用懒加载,启动就别装配了,使用的时候再说。这样使用的时候就是使用Spring Boot Mock出来的bean

完整代码如下:

java 复制代码
@SpringBootTest(properties = {"spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration", "spring.main.lazy-initialization=true"})
class ApplicationTests {
    @Test
    void contextLoads() {

    }

}

方式二

其实就不用@SpringBootTest了,直接使用注解@RunWith(MockitoJUnitRunner.class),但由于我的版本是2.7,Spring Boot提供的其实是Junit5,@RunWithJunit4版本,需要额外引入。

这种方式需要测试的类就不能是使用@Autowired引入了,不能像在Spring Boot环境里了,只能自己实例化进行测试。


打完收工

相关推荐
亦暖筑序1 小时前
Spring AI多模型路由实战:企业级智能路由+自动降本指南
spring boot·大模型·企业开发·spring ai·多模型路由
RemainderTime2 小时前
Spring Boot脚手架集成Sa-Token实现生产级RBAC权限管理
java·spring boot·后端·系统架构
世界尽头与你2 小时前
Spring Boot Watcher 未授权访问漏洞
spring boot·安全·网络安全·渗透测试
lpd_lt2 小时前
AI生成Spring Boot + Vue 3 + MySQL + MyBatis-Plus的项目实战
java·spring boot·vue·ai编程
绝知此事2 小时前
RabbitMQ 从入门到精通:Spring Boot 实战三部曲(三)—— 高级应用与性能优化
spring boot·rabbitmq·java-rabbitmq
绝知此事2 小时前
RabbitMQ 从入门到精通:Spring Boot 实战三部曲(一)—— 基础核心与快速上手
spring boot·rabbitmq·java-rabbitmq
来杯@Java12 小时前
图书管理系统(基于springboot+vue前后端分离的项目)计算机毕业设计java
java·spring boot·spring·vue·毕业设计·mybatis·课程设计
qq_25183645714 小时前
SpringBoot+Vue 共享电池柜管理系统 完整实现 前后端分离项目实战 完整代码
vue.js·spring boot·后端
汽车仪器仪表相关领域20 小时前
Kvaser Hybrid CAN/LIN 单通道三合一总线分析仪:高性价比CAN FD/LIN集成测试利器
运维·服务器·网络·数据挖掘·数据分析·单元测试·集成测试
Java程序员-小白21 小时前
Spring Boot整合Sa-Token框架(入门篇)
java·spring boot·后端·sa-token