Mocking is primarily used in unit testing. An object under test may have dependencies on other (complex) objects. To isolate the behavior of the object you want to test you replace the other objects by mocks that simulate the behavior of the real objects. This is useful if the the real objects are impractical to incorporate into the unit test.

In short, mocking is creating objects that simulate the behavior of real objects.


At times you may want to distinguish between mocking as opposed to stubbing. There may be some disagreement about this subject but my definition of a stub is a "minimal" simulated object. The stub implements just enough behavior to allow the object under test to execute the test.

A mock is like a stub but the test will also verify that the object under test calls the mock as expected. Part of the test is verifying that the mock was used correctly.

To give an example: You can stub a database by implementing a simple in-memory structure for storing records. The object under test can then read and write records to the database stub to allow it to execute the test. This could test some behavior of the object not related to the database and the database stub would be included just to let the test run.

If you instead want to verify that the object under test writes some specific data to the database you will have to mock the database. Your test would then incorporate assertions about what was written to the database mock.

mocking主要用于单元测试。在测试中一个对象可能和其他复杂的对象有关联。那么为了独立这个想测试的对象,那么你就可以使用mock来替换其他的对象来模拟真实对象行为。这个很有用如果真实对象融入到test中是不切实际的话。

mocking和stubbing的区别,stub允许对象在test中执行test。mock和stub很相似但是test会verify test下的object如同预期一样调用了mock。test也verifying mock使用正确。

举例说明:你可以通过执行一个简单的结构体存储记录来stub一个数据库。object可以读取和写入记录到数据库stub中来允许他执行test。这个可以测试一些和数据库不相关的对象并且数据库stub会被包含其中来让test运行。

如果你想确认test中的对象向数据库写入了一些数据,那么你就要mock这个数据库。你的测试然后就会对写入到这个数据库mock给出assertions判断了。

What is Mocking?的更多相关文章

  1. Testing with a mocking framework (EF6 onwards)

    When writing tests for your application it is often desirable to avoid hitting the database.  Entity ...

  2. 单元测试 Mocking 类库需具备的特性

    一个优秀的单元测试 Mocking 类库,需要具备如下几个特性: 易用性:有非常明确的 API ,易于使用并易于记忆. 健壮性:行为结果始终一致,并保持准确. 帮助性:当程序出错时,给出尽可能明确的原 ...

  3. 什么是Mocking framework?它有什么用?

    原位地址:http://codetunnel.com/blog/post/what-is-a-mocking-framework-why-is-it-useful 今天我想讲下关于mocking fr ...

  4. Mocking framework

    [译] 什么是Mocking framework?它有什么用? 原位地址:http://codetunnel.com/blog/post/what-is-a-mocking-framework-why ...

  5. C# Note37: Writing unit tests with use of mocking

    前言 What's mocking and its benefits Mocking is an integral part of unit testing. Although you can run ...

  6. AngularJS 的异步服务测试与Mocking

    测试 AngularJS 的异步服务 最近,在做项目时掉进了 AngularJS 异步调用 $q 测试的坑中,直接躺枪了.折腾了许久日子,终于想通了其中的道道,但并不确定是最佳的解决方案,最后还是决定 ...

  7. TDD:simply mocking a class is not necessarily the best practice

    simply mocking a class is not necessarily the best practice either—it might be better to refactor th ...

  8. The Art of Mocking

    One of the challenges developers face when writing unit tests is how to handle external dependencies ...

  9. What is a mocking framework? Why is it useful?

    Today I want to talk about mocking frameworks and why they are useful. In order to do that I first n ...

随机推荐

  1. HDU 3957 Street Fighter (最小支配集 DLX 重复覆盖+精确覆盖 )

    DLX经典题型,被虐惨了…… 建一个2*N行3*N列的矩阵,行代表选择,列代表约束.前2*N列代表每个人的哪种状态,后N列保证每个人至多选一次. 显然对手可以被战胜多次(重复覆盖),每个角色至多选择一 ...

  2. 201621123033 《Java程序设计》第3周学习总结

    第三周作业 1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识点组织起来.请使用工具画出本周学习到的知识点及知识点之间的联系.步骤如下: 1 ...

  3. [HNOI2015][bzoj4011] 落叶枫音 [拓扑DP]

    题面 传送门 思路 首先有一个结论(应该是有比较大的利用价值的): 有向无环图的生成外向树树个数等于所有入度非0的点的入度乘积 然后这道题里面,唯一不合拍的因素就是这里有一条可能成环的边 我们可以把这 ...

  4. Ubuntu扩展系统盘容量,虚拟机下

    安装gparted软件 sudo apt-get install gparted 接下来, 我们开始用Gparted软件扩展Ubuntu目录的容量: 先看操作步骤: 1. 先从windows的 ntf ...

  5. 2017 多校2 hdu 6053 TrickGCD

    2017 多校2 hdu 6053 TrickGCD 题目: You are given an array \(A\) , and Zhu wants to know there are how ma ...

  6. 添加对WCF的调用(内网状态下)。

    在能连接到内网的电脑上,运行SvcUtil.exe工具即可. 如打开文件后闪退,则可打开cmd后,将文件拖入到cmd中,然后再加上文件的地址.

  7. CSU 2136 ——湖南多校对抗赛 I

    2136: 统帅三军! Submit Page   Summary   Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 55     ...

  8. spring in action学习笔记十五:配置DispatcherServlet和ContextLoaderListener的几种方式。

    在spring in action中论述了:DispatcherServlet和ContextLoaderListener的关系,简言之就是DispatcherServlet是用于加载web层的组件的 ...

  9. hdu 1847 Good Luck in CET-4 Everybody! SG函数SG引理

    大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此.当然,作为在考场浸润了十几载的当代大学生,Kiki和Cici更懂得考 ...

  10. Python学习笔记(Django篇)——2、创建第一个django应用

    在helloworld工程的基础上,我们准备创建第一个基于web的django应用,把这个应用名字命名为demo   首先,是如何创建这个应用包,当然第一选择我们可以进入到cmd中,执行如下命令 py ...