单测好处:
指对软件中最小的可测试单元进行检查和验证,调用被测服务的类或方法,根据类或方法的参数,传入相应的数据,得到一个返回结果,最终断言返回的结果是否符合预期。如果相等,测试通过;如果不相等,测试失败。
所以,单元测试关注的是代码的实现与逻辑。单元测试是最基本的测试,也是测试中的最小单元,它的对象是函数对象,也可以包含输入输出,针对的是函数功能或者函数内部的代码逻辑,并不包含业务逻辑。
该类测试一般由研发人员完成,需要借助单元测试框架,如java的Junit、TestNG,mockito,python的unittest等
1.运行快速
单元测试运行比较频繁,如果打包时候,单元测试运行很慢,会很影响效率。
2.一致性
任何时候,同样的输入需要同样的结果。
3.原子性
所有的测试只有两种结果:通过和未通过。不能存在部分测试通过的情况
4.单一职责
一个测试只验证一个行为。
5.独立无耦合
单元测试之间无相互调用
单元测试之间不能共享状态
6.隔离外部调用
7.自描述
8.单元测试逻辑
9.产品代码
根据上述指导思想和实际实现情况,一般在实现单元测试时有两种不同的实现方式
正常代码分层会分为controller、service、dao等,在单层隔离的思想中,是针对每一层的代码做各自的单元测试,不向下穿透。这样的写法主要是保证单层的业务逻辑固化且正确。
实践过程中,例如针对controller层编写的单元测试需要将对应controller类代码文件外部所有的调用全部mock,包括对应的内部/外部的service。其他层的代码也是如此。(可以参考样例代码中cdo-test-sample-core层的单测代码)
好处
缺点
穿透,自然就是从顶层一直调用到底层,为什么还要加上内部二字?就是除了项目内的方法可以穿透,项目外部依赖还是要mock掉。实践过程中,就是单元测试针对controller层编写,但会完整调用service、dao,最终对落地结果进行验证。(可以参考样例代码中cdo-test-sample-api层的单测代码)
好处
缺点
这两种方法,具体使用哪种合适,应该由项目成员根据项目实际情况自行选择,一般建议核心项目两种执行方法都可以同时执行,具体实施时可以先执行“单层隔离”积累单测用例,再做“内部穿透”。
PS:我们一般使用@SpringBootTest注解进行集成测试,使用其它spring test(@WebMvcTest)注解进行特定组件的单元测试。
参考文档:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。