深入理解Mock工作原理

Mock的作用不同于Spy,Fake。Mock主要用于测被测体与外部的交互逻辑。一般是指在不同的场景下多次的与外部交互。当外部依赖是硬件,或者外部程序不ready的情况下,Mock就能帮助完成单元测试。

以下图为例,FlashDriver与IO系统有多次的交互,交互函数是read,和write。根据需求,在一次烧写flash操作中,先要调用两次write,然后根据read返回的结果不同,采取不同的交互操作。每个Case需要设置write,read的不同输入与不同输出以模拟各种场景。(在每个case中,MockIO就像simulation一样。)

见下图中MockIO的测试case,该Case可以预先设置每次读写操作的参数。下面一共设置了4次。设置完毕后,调用Flash_Write函数。如果Flash_Write函数操作流程符合上述4步预设步骤及参数,则case通过。

下面只是一种测试场景,其他的场景可能是3才操作,5次操作或者多次操作。Mock的作用就是能通过设置输入输出值,让被测代码的各种工作场景都可以被测试覆盖。



上述程序是由程序自身实现了Mock机制(事先准备数据,调用时候逐一使用)。当前已经有现成的Mock工具:如与GTest搭配的GMock,与JUnit搭配的EasyMock。这样现成的工具能方便的设定被mock对象及函数的调用参数及返回值。

C++: GoogleMock http://code.google.com/p/googlemock/

Java: EasyMock http://easymock.org/

为方便测试,程序设计应该采用 依赖倒置原则,让被测试类依赖于接口。Mock类实现该接口。被测类通过调用接口最终调用到Mock类,完成测试。而被测试类可以不作任何修改就能在实际系统里工作。这就是使用TDD能很自然的使产品代码于外部依赖松耦合。


关于Mock与其他Double之间的区别, 参见测试驱动开发中的Dummy, Stub, Spy, Mock, Fake

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值