测试数据
测试替代技术
Mock和Stub的本质区别:测试期待结果的验证(Assert and Expectiation)
- 对于 Mock 代码来说,我们的关注点是 Mock 方法有没有被调用,以什么样的参数被调用,被调用的次数,以及多个 Mock 函数的先后调用顺序。所以,在使用 Mock 代码的测试中,对于结果的验证(也就是 assert),通常出现在 Mock 函数中。
- 对于桩代码来说,我们的关注点是利用 Stub 来控制被测函数的执行路径,不会去关注 Stub 是否被调用以及怎么样被调用。所以,你在使用 Stub 的测试中,对于结果的验证(也就是 assert),通常出现在驱动代码中。
桩代码(stub)
- 用来代替真实代码的临时代码
- 对顶层或上层模块进行测试时所编写的替代下层模块的程序
- 仅用于替代当前代码依赖
目的:
- 起到了隔离和补齐的作用,使被测代码能够独立编译、链接,并独立运行
- 还具有控制被测函数执行路径的作用
Mock
- 经过编程,可以做检查并发送符合规则的响应
- 更强大的能力:验证这个 Mock 对象在方法调用过程中的使用情况,比如调用了几次
具体框架
Mock框架
- requests-mock: 基于Python/Requests的API mock库
- rap2: nodejs实现,通过web配置mock api
- WireMock: HTTP服务Mock工具 [java]
- Martian : HTTP/S proxies,Go实现 by Google
- prism: nodejs实现
- mountebank : nodejs实现,基于配置的实现
- Google Test: C++ 测试
单元测试
录制回放类
录制 HTTP/HTTPS 请求然后回放之前录制的HTTP事务(称为情景)
- GoReplay : Go实现
- mockingjay server: Go实现,不需要编码
- VCR.py: python实现
- Flashback: Java实现