+ 首页>>技能>>快速科普>>内容

技能经典闹钟例子解释MOCK测试理念28次围观

在维基百科上这样描述Mock:In object-oriented programming, mock objects are simulated objects that mimic the behavior of real objects in controlled ways. A computer programmer typically creates a mock object to test the behavior of some other object, in much the same way that a car designer uses a crash test dummy to simulate the dynamic behavior. of a human in vehicle impacts.

Mock引入的优势

Mock通常是指,在测试一个对象A时,我们构造一些假的对象来模拟与A之间的交互,而这些Mock对象的行为是我们事先设定且符合预期。通过这些Mock对象来测试A在正常逻辑,异常逻辑或压力情况下工作是否正常。
引入Mock最大的优势在于:Mock的行为固定,它确保当你访问该Mock的某个方法时总是能够获得一个没有任何逻辑的直接就返回的预期结果。

Mock Object的使用通常会带来以下一些好处:

隔绝其他模块出错引起本模块的测试错误。
隔绝其他模块的开发状态,只要定义好接口,不用管他们开发有没有完成。
一些速度较慢的操作,可以用Mock Object代替,快速返回。
对于分布式系统的测试,使用Mock Object会有另外两项很重要的收益:
通过Mock Object可以将一些分布式测试转化为本地的测试
将Mock用于压力测试,可以解决测试集群无法模拟线上集群大规模下的压力

经典闹钟例子

一个闹钟根据时间来进行提醒服务,如果过了下午5点钟就播放音频文件提醒大家下班了,如果我们要利用真实的对象来测试的话就只能苦苦等到下午五点,然后把耳朵放在音箱旁,我们应该利用mock对象来进行测试,这样我们就可以模拟控制时间了,而不用苦苦等待时钟转到下午5点钟了。下面是代码:

public abstract class Environmental {
    boolean playedWav = false;
    public abstract long getTime();
    public abstract void playWavFile(String fileName);
    public abstract boolean wavWasPlayed();
    public abstract void resetWav();
}

真实实现代码:

public class SystemEnvironment extends Environmental {
    public long getTime() {
        return System.currentTimeMillis();
    }
    public void playWavFile(String fileName) {
        playedWav = true;
    }
    public boolean wavWasPlayed() {
        return playedWav; 
    }
    public void resetWav() {
        playedWav = false;
    }
}

MOCK对象:

public class MockSystemEnvironment extends Environmental {
    private long currentTime;
    public long getTime() {
        return currentTime;
    }
    public void setTime(long currentTime) {
        this.currentTime = currentTime;
    }
    public void playWavFile(String fileName) {
        playedWav = true;
    }
    public boolean wavWasPlayed() {
        return playedWav;
    }
    public void resetWav() {
        playedWav = false;
    }
}

怎么样?如果之前没有听说过MOCK的童鞋现在能够理解MOCK了吧?

+ 猜你喜欢...

===== 关于 DiggerPlus =====
DiggerPlus是国内新锐测试人垂直内容博客,专注于挖掘测试工具,普及测试技术,专注于测试人能力提升,博客上线后就受到广大测试人的热烈追捧;此外,DiggerPlus深度整合评测资源,揭秘科技数据和真相,让读者更懂科技,更好地把玩科技。 我们始终保持"独立,客观,严谨,优秀"的优良作风,努力为读者带来源源不断的优质内容。想访问更多酷毙的测试人网站?赶紧来DiggerPlus测试人网址导航看看吧!

===== DiggerPlus Team =====
DiggerPlus Team是DiggerPlus官方发起的团队,这是一群热爱科技,热爱测试,喜欢深度挖掘的热血测试人,他们是评测师,测试专家。 我们欢迎优秀的测试人加入DiggerPlus Team。 加入DiggerPlus,可以成为我们的认证Dper,认证Dper拥有DiggerPlus独一无二的专栏并得到个人展示。

===== DiggerPlus 官方读者群 =====
DiggerPlus官方读者群(一)

+ 关于本文作者

Python/C/C++/Javascript程序员,持续学习者,目前专注于前端开发。

的专栏 | 专栏作者 | 访问小A的主页

+ 已有5个评论

Copyright © 2014 DiggerPlus. 92 queries in 1.369 seconds.
使用合作网站账号快速登录,更多精彩等着您: 开源中国