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环境里了,只能自己实例化进行测试。


打完收工

相关推荐
光依旧7 小时前
MCP实战手记系列(十):MCP Server高可用实战
spring boot·高可用·nginx负载均衡·redis哨兵·mcp·微服务容错·resilience4j熔断
省钱兄--zs11 小时前
西安24小时自助健身房解决方案实战:系统开发与部署全流程指南
java·spring boot·系统架构·intellij-idea·需求分析
ly768913 小时前
Spring Boot 集成 Elasticsearch 的生产实践:客户端选型、索引生命周期与批量写入容错
spring boot·elasticsearch·索引生命周期·java api client·批量写入
程序猿_极客13 小时前
【免费】分享一套优质的基于SpringBoot的服装商城管理系统的设计与实现(带可视化图表、协同过滤功能),源码+文档+视频详解(讲解)
java·spring boot·后端·服装商城管理系统
bug菌14 小时前
🤔同事突然问我:Spring的注解 @Component 和 @Service 有何不同?
java·spring boot·后端
Lonely丶墨轩14 小时前
用 Vue + Spring Boot + Python 做一个 AI 双人海龟汤游戏:从出题、联机到自动审稿等核心技术设计与实现
spring boot·后端·游戏
她的男孩16 小时前
打印模板草稿能保存,一点发布就报主从关系:我们把校验拆成了两档
java·spring boot·后端
wno70417 小时前
Spring Boot整合Quartz
java·spring boot·后端
萧瑟余晖18 小时前
Spring Boot Actuator监控运维详解
spring boot
vipxieliang19 小时前
ValidX 财务系统发票验证:发票号、税号、金额校验
java·spring boot