51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1973|回复: 0
打印 上一主题 下一主题

[原创] 深入理解Mock工作原理

[复制链接]
  • TA的每日心情
    擦汗
    2022-8-30 09:02
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2019-3-22 15:30:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    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对象及函数的调用参数及返回值。
    1. C++: GoogleMock http://code.google.com/p/googlemock/

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



    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-4-20 20:14 , Processed in 0.064493 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表