学无止境,气有浩然!
文章目录
前言
项目最近引入
sonarqube
,扫描之后没有代码覆盖率,是因为没有写单元测试,于是需要从头引入单元测试。
单元测试
Spring Boot
提供了单元测试的框架,只需要引入。但是麻烦的点是,如果使用这个,
Spring Boot
就会进行一系列的自动配置,项目上数据库密码的配置是没有在
properties
文件里配置的,就意味着在单元测试启动就会报错,数据库依赖相关的
bean
组装失败。
但是,条条大路通罗马。
方式一
如果启动的时候,数据库相关的不让自动配置不就好了。
@SpringBootTest
里面有个
properties
属性,这个配置就跟
properties
里面是一毛一样的。所以直接排除掉数据库的配置就好了。
@SpringBootTest(properties ={"spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration"})
又一个问题蹦出来了,在类里
@Autowired
某个对象的时候,还是回去装配,启动还是会报错,这样你
mock
注入的
bean
不会生效,怎么办呢。
可以使用懒加载,启动就别装配了,使用的时候再说。这样使用的时候就是使用
Spring Boot Mock
出来的
bean
。
完整代码如下:
@SpringBootTest(properties ={"spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration","spring.main.lazy-initialization=true"})classApplicationTests{@TestvoidcontextLoads(){}}
方式二
其实就不用
@SpringBootTest
了,直接使用注解
@RunWith(MockitoJUnitRunner.class)
,但由于我的版本是
2.7
,
Spring Boot
提供的其实是
Junit5
,
@RunWith
是
Junit4
版本,需要额外引入。
这种方式需要测试的类就不能是使用
@Autowired
引入了,不能像在
Spring Boot
环境里了,只能自己实例化进行测试。
打完收工
版权归原作者 梦幻D开始 所有, 如有侵权,请联系我们删除。