文章目录
- 前言
- 一、最简单的单元测试
- 二、springboot多模块测试单元
- 1.问题
- 2.解决
- 总结
前言
相信后端的小伙伴对于junit测试应该不陌生,当我们写好了一些功能之后,由于不太放心是否会出现问题,我们会选择自测;
- 第一种 通过类似postman之类的,直接走接口测试
- 第二种 由于构造数据种种原因,导致不好走接口测试,所以走代码测试,即junit测试
在springboot项目中,单模块项目很好做,只要生成测试类即可,那么在springboot多模块项目中如何做junit测试呢? 会有什么问题?
一、最简单的单元测试
例如: 我现在有一个单模块的springboot项目,然后有一个接口,想做下测试,看是否是正确的;
Animal 是我编写的一个接口
AnimalTest 就是我为了测试 Animal中的功能,而生成出来的一个单元测试类(junit)
如何生成呢?
- 1 在这个接口类名上单击,然后 artl+enter
- 2 在弹出的列表中选择create test即可,生成这个测试类
- 3 加入相关注解 @SpringBootTest 等…
- 4 开始编写测试用例代码即可
- 5 例如ss()方法我已经写完了,选中 ss(), 右键执行即可
一定要是生成的测试类,自己建的测试类也行,但是必须与要测试的类,所在包路径一致
二、springboot多模块测试单元
1.问题
分模块后,一般来说测试类与启动类不在同一个模块下,但是测试类启动的时候,需要依赖启动类
例如我做如下拆分
那么当我想在 query,manage 模块创建测试类的时候… 就会出现如上问题,报错如下:
Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test
如果想解决此问题,可以选择在 @SpringBootTest(class="***)中指定启动类,但是!!!
由于分模块,一般都是启动类依赖了其他模块,你现在如果在测试类中,引入启动类~~,那就循环依赖了!!
expected at least 1 bean which qualifies as autowire candidate
这个问题是由于未扫描到引入的类,没有被纳入spring容器
例如: 我如果不加 @EnableFeignClients 但是还要用feign 去请求访问的话,那么就会报这个错误
2.解决
这两个注解是我用到了,没用到的小伙伴可以不用哈
@EnableDiscoveryClient
@EnableFeignClients
一般的项目只需要 @SpringBootApplication 这个即可
- 1 在测试文件夹中创建一个启动类,名字无所谓,但是注解要全
/**
* @author fulin
* @since 2023/5/10 10:35
*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class TestApplication {
}
- 2 将启动类中的resources文件夹,以及下面的yml配置文件粘贴到test文件夹中
再次启动,发现已经ok了
开始打印feign请求日志
总结
单元测试的目的是在集成测试和功能测试之前对软件中的可测试单元进行逐一检查和验证。单元测试是程序功能的基本保障,是软件产上线非常重要的一环。
对于后端程序员来说,也是对自己工作的态度,以及与别人撕逼的底气!
普通项目的单元测试,只需要根据快捷键生成测试类,干就完了;
多模块项目的单元测试,则需要上点小小的手段,让他听话工作~~