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,@RunWith是Junit4版本,需要额外引入。

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


打完收工

相关推荐
云创智城-yuncitys1 小时前
YunParking 4.0:JDK 17 与 Spring Boot 3.2 的停车云升级
java·开发语言·spring boot
paopaokaka_luck2 小时前
灾害应急物资管理系统(AI应急助手、Echarts可视化数据看板、捐赠入库联动、 物资全流程管理、库存变动追溯、灾情资讯与互动反馈、物资发放公示)
java·前端·javascript·spring boot·mysql·tomcat·echarts
学长毕设4 小时前
基于SpringBoot的网上流浪狗救助捐赠平台-附源码
java·spring boot·后端
码农的日常5 小时前
前后端Long精度丢失的踩坑
spring boot·架构
杨运交6 小时前
086-对象存储模块-基于Spring Boot的文件存储模块监控设计与实现
java·spring boot·后端
wifi___7 小时前
SpringBoot自动装配原理
java·spring boot·后端
Small-Young8 小时前
数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南
数据库·spring boot·mysql·postgresql·乐观锁·并发控制
她的男孩9 小时前
租户 A 的验证码,却用了租户 B 的 AccessKey:Forge Admin 修跨租户短信串发
java·spring boot·saas
小蒜学长9 小时前
基于SpringBoot+Vue的云南地区扶贫助农系统的设计与实现(代码+数据库+LW)
java·vue.js·spring boot·后端·乡村振兴