有 A 模块和 B 模块,俩模块中都负责比较复杂的逻辑,但都是我们自己实现且同事在职。 A 模块总是与 B 模块通过 tcp 通信,发一个 protobuf 并接一个 protobuf 。目前要测 A 的一个函数 f ,需要 B 在某种特定情况下(比如先开机,再翻转 360 度,再以 60km/h 弹射起步,最后以最小角度入水)才能模拟。
mock 一个模块 B ,简单实现一个内部逻辑,通过一些新增的函数去定制上面描述的特殊情况。
因为他俩通过 tcp 来通信,重写一个简单的 Send 函数,对于特定请求 request ,直接返回 response ,这样 A 每次调用 Send 都会收到事先写好的 response ,就可以直接处理。
方案 1 中的 mock B 可能需要和实际的 B 逻辑进行同步,好处是测试写起来更简单清晰,如果有新增测试只需要简单添加一个新的测试就行,坏处是自己本身的正确性无法保证。
方案 2 不需要在意实际 B 的更新,但缺点是测试可能会比较繁琐,需要人工模拟请求与返回(这里有个取巧的办法是将某个实际的请求与返回记录下来直接做成测试),后期几乎无法维护,只能新增。
模块 B 目前处于开发后期,功能暂时不会有新的,修复 bug 肯定会有。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.