Mock

Mock

Mock概念介绍

mock的定义(what):

mock是在测试过程中,对于一些不容易构造/获取的对象,创建一个mock对象来模拟对象的行为

为什么要使用mock(why):

  • 被测对象依赖的对象构造复杂

我们想对class A进行单元测试,需要构造大量的class B、C、D等依赖对象,他们的构造过程复杂(体现在构造步骤多、耗时较长),这时我们可以利用mock去构造虚拟的class B、C、D对象用于class A的测试,因为我们只是想测试class A的行为是否符合预期,我们并不需要测试依赖对象。

  • 被测单元依赖的模块尚未开发完成,而被测对象需要依赖模块的返回值进行测试:
    比如service层的代码中,包含对dao层的调用,但dao层代码尚未开发
    比如web的前端依赖后端接口获取数据进行联调测试,但后端接口并未开发完成

哪些时机和场合需要使用mock(when&where)

  • 单元测试/接口测试中测试对象依赖其他对象,这些对象的构造复杂、耗时或者根本无法构造(未交付)
  • 我们只测试对象内部逻辑的质量,不关心依赖对象的逻辑正确性和稳定性

是否应该在测试中使用mock,投入产出比如何(how much)

我们可以基于以下2个原则去做mock,这样的mock的投入产出比是最高的

  • 不需要对所有的依赖对象/服务进行mock,只对那些构造步骤复杂、构造耗时较长、不稳定的依赖对象/服务进行mock。
  • 如果做分层测试(比如分层自动化),高层的测试设计可以基于以下假设:低层的测试已保证低层对象的质量,高层对低层的依赖可以mock,无需关心所依赖的低层对象的质量。