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


打完收工

相关推荐
用户3777967210961 小时前
BeanPostProcessor失效?
spring boot
程序员阿达1 小时前
开题报告之基于SpringBoot框架的图书借阅系统的设计与实现
java·spring boot·后端
C++chaofan2 小时前
MyBatis - Plus学习笔记
java·spring boot·笔记·后端·mysql·架构·mybatis
刘一说2 小时前
深入理解 Spring Boot 中的 Redis 缓存集成:从基础配置到高可用实践
spring boot·redis·缓存
一缕南风2 小时前
Spring Boot 响应拦截器(Jackson)实现时间戳自动添加
java·spring boot·后端·拦截器
user_admin_god3 小时前
基于Layui Vue Admin + Spring Boot 3.x 的企业级前后端分离管理系统
vue.js·spring boot·layui
川石课堂软件测试4 小时前
Python | 高阶函数基本应用及Decorator装饰器
android·开发语言·数据库·python·功能测试·mysql·单元测试
Filotimo_4 小时前
springboot的单元测试功能有什么用
spring boot·单元测试·log4j
不光头强4 小时前
Spring整合单元测试
spring·单元测试·log4j
慧都小项4 小时前
Parasoft C/C++test如何在CCS3环境下进行F2812项目的单元测试
单元测试·parasoft·ccs3