单元测试和mock的使用
1|0单元测试
在导师公司打工,做了一个版本,技术上虽然没学到什么新东西,但是至少明白公司开发的各个流程,尤其是在提测阶段十分痛苦。一个bug反复出现,不停的修改,不停的调试,十分折腾。总结了一下异常处理没有放到controller层,log的使用还不够,另外明白了单元测试的重要性。从前到后找bug实在是太过痛苦,应当用单元测试把bug扼杀在摇篮里。特此总结单元测试的方法和用到的技术,争取下一个版本做到0bug提测。
1|1包结构规范
单元测试包结构和源码结构保持一致
1|2命名规范
文件名
被测试文件名+Test
方法名
test+方法名+情况说明
1|3不同单元测试类规范
以下所有的单元测试都要使用assert进行断言,要注意分支覆盖率尽可能提高,基层基础测试类
基础测试类,用于启动Springboot环境
setup方法
每一个测试类都要有一个setup方法并用@Before注解,该方法用于装载测试时需要的属性
Controller层
使用MockMvc模拟http请求(见后面教程)
Service层
Dao层
注意加上注解@RollBack防止数据库污染,整个类加上@Transactional注解
2|0Mock的使用
mock主要是在某个接口还尚未实现或者难以调用时来产生一个临时的实现类
MockMVC
MockMVC是Controller层测试时用于构造http请求模拟网络环境时用到的。由spring-test提供。在json请求场景中使用方法如下
Get请求示例
说明:setup用于向mockMvc传入当前web环境,可以使用mockmvc的.andExpect来进行断言,一般在json返回值中使用MockMvcResultMatchers.jsonPath静态方法断言json中的某个值是否满足,也可以通过下面的
result.getResponse().getContentAsString();方法直接得到json字符串做后续处理
post请求示例
使用mockito构造接口
Mockito已经包含在了springboot-test-starter里不需要额外引入
说明:首先需要装载接口类,然后用Mockito.when().thenReturn方法定义接口中方法的行为即可实现mock调用
也可以使用注解注入
2|1Assert的使用
java自带的关键字assert十分僵硬,只能传入一个boolean值,而且断言失败后直接就推出了rollback也不能回滚,因此最好用junit中的Assert类
assertEqual
判断两者是否一致
assertTrue, assertFalse
直接判断boolean的值
assertNull,assertNotNull
就不多说了
assertSame, assertNotSame
判断两者对象引用是否相同
assertThat
这个是重点,可以传入一个hamcrest提供的Matcher接口来进行判断
__EOF__

本文链接:https://www.cnblogs.com/PanYuDi/p/14968953.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 全程使用 AI 从 0 到 1 写了个小工具
· 快收藏!一个技巧从此不再搞混缓存穿透和缓存击穿
· AI 插件第二弹,更强更好用
· Blazor Hybrid适配到HarmonyOS系统
· 支付宝 IoT 设备入门宝典(下)设备经营篇