本文基于springboot版本1.4+ 推荐使用mock完全单节点测试和全链路测试
我们的单元测试是系统质量保证的重要一环,需要引起重视。但是由于目前分布式系统相互直接依赖繁杂 ,如果实际按业务数据来跑单元测试,那很难遵循单元测试的 AIR 原则【 Automatic(自动化)、Independent(独立性)、Repeatable(可重复)】 ,因而我们会引入mock来辅助完成单元测试。
另一方面单元测试分为两部分 一个是单个最小单元的测试,另一种是单个系统内部全链路的测试。本文主要描述如果写全链路测试的方案
1、单节点测试
单一最小原子化测试这部分就不过多赘述了 参考之前的mock测试就就行了,不过这种模式最大的弊端就是不能跨层调用,因为我们系统内部很多代码都有分层 web-service-dao(rpc)
如果我们测试web层时 只能全mock service层服务,然后再层层递减的往下测试,工作量也比较大。
下面的系统全链路测试提供了 从web测试mock service或者mock dao 自由组合选择的方式,支持了跨层级的验证方式。
2、系统内全链路测试
当我们系统的很多环节都完成了单元测试,但是发现并没有整个系统内部的某个服务从头到尾全链路的测试的case,这种情况 容易造成一个问题,就是每个环节都没有问题,但是把每个环节串联起来的时候发现与实际业务期望并不符合。其中很多时候是因为我们在编写最小原子单元测试的时候,更多的视角局限于这一点,容易忽视某些点。
但是从服务的最高点出发来思考问题 ,可以相对的覆盖更多的实际业务场景。所以我们还需要关注全链路的测试。
下面推荐一种单元测试的写法 ,供大家参考,每个人都有不同的看法,一起完善最终可能就会完美
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes ={
SimpleResourceIm