51Testing软件测试论坛

标题: 深入理解Mock工作原理 [打印本页]

作者: 胖虎    时间: 2019-3-22 15:30
标题: 深入理解Mock工作原理
Mock的作用不同于Spy,Fake。Mock主要用于测被测体与外部的交互逻辑。一般是指在不同的场景下多次的与外部交互。当外部依赖是硬件,或者外部程序不ready的情况下,Mock就能帮助完成单元测试。

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

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

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

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

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








欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2