mock和沙箱笔记、stub硬编码
文章目录mocktotalMockFlag mock总开关如何标记为mock如何优雅的mock、mock和数据库有交互怎么办沙箱沙箱的数据沙箱设计时要注意什么stub硬编码mock和stub的区别?mock和沙箱是调试时的两大块。二者有相似之处也有区别。mock主要是在不启动服务的情况下提供接口的能力。沙箱是一套运行环境。mock在测试时mock是很有用的。例如有些场景在测试环境不能实际发生用mock返回类似的报文可以保证调试的连续性。totalMockFlag mock总开关毫无疑问这个开关测试环境开放生产关闭。如何标记为mock常用的有两种。1、mockFlag # 单接口mockFlag true表示是mock2、其他参数例如根据机构编码或者其他参数传入某个值或某些值时后台自动判断为mock。如何优雅的mock、mock和数据库有交互怎么办mockType # mock类型不同type对应不同业务场景mockType对应的报文可以用枚举写死或者每个接口对应一个专门的mock类里面有多个方法。沙箱沙箱环境是非常重要的有很多现成的套路。1、环境、代码打包成一套沙箱和生产部署的环境和代码都是完全相同的 # 例如使用docker2、沙箱数据要做规则约束(例如格式、长度等)但是不能做实际数据约束沙箱的数据这是一个重点环境和代码通过打包可以做到一致但是数据一定做不到一致但是可以想一些办法。1、约定沙箱特有税号、信息等建议用脚本初始化速度还快一些。2、建议通过配置开关的形式完成沙箱、生产0代码切换。注沙箱环境肯定会有一些成本例如数据成本、测试成本等但是为了实现隔离这个成本必须有。只要实现思路对有一些成本也是正常的。沙箱设计时要注意什么一定是基于业务的。入参结构必须一致。校验规则必须一致。返回报文必须一致。数据链路必须一致例如新增了需要可以查出来。也就是说生产业务对应的动作及数据在沙箱也要一致。沙箱的复杂度甚至高过生产因为有些特殊场景生产都比较少但是沙箱需要有能力模拟出这种场景。stub硬编码以前经常这么做接口要模拟数据用mock来实现例如MockUserUtils.generateUser();这个思路是没问题的但是用Stub更符合规范。mock和stub的区别?stub # 只关注结果例如返回报文是否为想要的mock # 关注过程例如中间要查库并调用外部接口是否做了这个动作所以说如果纯粹为了返回数据更应该用stub。