[转]TDD之Dummy Stub Fake Mock
TDD之Dummy Stub Fake Mock
测试驱动大家都很熟悉了,这两天正好看了一个java的书,对TDD中的一些基本概念进行了复习,具体如下:
|
Dummy |
An object that is passed around but never used. Typically used to fulfill the parameter list of a method. |
|
Stub |
An object that always returns the same canned response. May also hold some dummy state. |
|
Fake |
An actual working implementation (not of production quality or configuration) that can replace the real implementation. |
|
Mock |
An object that represents a series of expectations and provides canned responses. |
Dummy
A dummy object is the easiest of the four test double types to use. Remember, it’s designed to help fill parameter lists or fulfill some mandatory field requirements where you know the object will never get used. In many cases, you can even pass in an empty or null object.
@Test
public void tenPercentDiscount() {
String dummyName = "Riley";
Ticket ticket = new Ticket(dummyName, new BigDecimal("10"));
assertEquals(new BigDecimal("9.0"), ticket.getDiscountPrice());
}
Stub object
You typically use a stub object when you want to replace a real implementation with an
object that will return the same response every time. Let’s return to our theater ticket
pricing example to see this in action.
@Test
public void tenPercentDiscount() {
Price price = new StubPrice();
Ticket ticket = new Ticket(price);
assertEquals(9.0,
ticket.getDiscountPrice().doubleValue(),
0.0001);
}
public class StubPrice implements Price {
@Override
public BigDecimal getInitialPrice() {
return new BigDecimal("10");
}
}
Fake object
A fake object can be seen as an enhanced stub that almost does the same work as your production code, but that takes a few shortcuts in order to fulfill your testing require -ments. Fakes are especially useful when you’d like your code to run against something that’s very close to the real third-party subsystem or dependency that you’ll use in the live implementation
Most well-grounded Java developers will sooner or later have to write code that interacts with a database, typically performing CRUD operations on Java objects. Prov-ing that your Data Access Object ( DAO) code works before running it against the pro-duction database is often left until the system integration test phase, or it isn’t checked at all! It would be of great benefit if you could check that the DAO code works during your unit test or integration test phase, giving you that all important, fast feedback.
A fake object could be used in this case—one that represents the database you’re interacting with. But writing your own fake object representing a database would be quite difficult! Luckily, over recent years, in-memory databases have become small enough, lightweight enough, and feature-rich enough to act as a fake object for you.
HSQLDB (www.hsqldb.org) is a popular in-memory database used for this purpose.
Mock object
Mock objects are related to the stub test doubles that you’ve already met, but stub objects are usually pretty dumb beasts. For example, stubs typically fake out methods so that they always give the same result when you call them. This doesn’t provide any way to model state-dependent behavior.
Mockito (available from http://mockito.org/
@Test
public void tenPercentDiscount() {
Price price = mock(Price.class);
when(price.getInitialPrice()).
➥ thenReturn(new BigDecimal("10"));
Ticket ticket = new Ticket(price, new BigDecimal("0.9"));
assertEquals(9.0, ticket.getDiscountPrice().doubleValue(), 0.000001);
verify(price).getInitialPrice();
}
退出登录 订阅评论
[Ctrl+Enter快捷键提交]
[转]TDD之Dummy Stub Fake Mock的更多相关文章
- Stub和Mock的理解
我对Stub和Mock的理解 介绍 使用测试驱动开发大半年了,我还是对Stub和Mock的认识比较模糊,没有进行系统整理. 今天查阅了相关资料,觉得写得很不错,所以我试图在博文中对资料进行整理一下,再 ...
- 我对Stub和Mock的理解
介绍 使用测试驱动开发大半年了,我还是对Stub和Mock的认识比较模糊,没有进行系统整理. 今天查阅了相关资料,觉得写得很不错,所以我试图在博文中对资料进行整理一下,再加上一些自己的观点. 本文是目 ...
- What's the difference between a stub and mock?
I believe the biggest distinction is that a stub you have already written with predetermined behavio ...
- 使用 Moq 测试.NET Core 应用 - Why Moq?
什么是Mock 当对代码进行测试的时候, 我们经常需要用到一些模拟(mock)技术. 绿色的是需要被测试的类, 黄色是它的依赖项, 灰色的无关的类 在一个项目里, 我们经常需要把某一部分程序独立出来以 ...
- Go项目的测试代码3(测试替身Test Double)
上一篇文章介绍了项目中测试代码的写法. Go项目的测试代码2(项目运用) 这里简单的共享一下测试替身. 当我们写测试代码的时候,经常遇到一个问题.跟别的模块或服务有依赖性,可是功能还没开发完.或是因为 ...
- TDD学习笔记【六】一Unit Test - Stub, Mock, Fake 简介
这篇文章简介一下,如何通过 mock framework,来辅助我们更便利地模拟目标对象的依赖对象,而不必手工敲堆只为了这次测试而存在的辅助类型. 而模拟目标对象的部分,常见的有 stub objec ...
- TDD:什么是桩(stub)和模拟(mock)?
背景 本文假设你对TDD.Stub和Mock已经有了初步的认识,本文简单解释一下stub和mock的区别和使用场景,先看看他们之间的关系: 由上图可以知道mock框架可以非常容易的开发stub和moc ...
- [转]软件测试- 3 - Mock 和Stub的区别
由于一直没有完全搞明白Mock和Stub的区别,所以查了很多文章,而这一篇是做好的: http://yuan.iteye.com/blog/470418 尤其是8楼,Frostred的发言,描述地相当 ...
- nodejs unit test related----faker-cli, sinonjs, mock/stub
http://www.tuicool.com/articles/rAnaYvn http://www.tuicool.com/articles/Y73aYn (contrast stub and mo ...
随机推荐
- FJUT16级第一周寒假作业题解I题
涨姿势题3 TimeLimit:1000ms MemoryLimit:128000KB 64-bit integer IO format:%lld Problem Description 涨姿势题就 ...
- 【转】大型Vuex项目 ,使用module后, 如何调用其他模块的 属性值和方法
Vuex 允许我们把 store 分 module(模块).每一个模块包含各自的状态.mutation.action 和 getter. 那么问题来了, 模块化+命名空间之后, 数据都是相对独立的, ...
- 把旧系统迁移到.Net Core 2.0 日记(1) - Startup.cs 解析
因为自己到开发电脑转到Mac Air,之前的Webform/MVC应用在Mac 跑不起来,而且.Net Core 2.0 已经比较稳定了. 1. 为什么会有跨平台的.Net Core 近年来,我们已 ...
- weex npm 报错 cb() never called!
安装环境:windows7 使用npm 安装 出现错误后网上查找并没有解决,在准备放弃的时候试着用cnpm安装了一下,结果安装成功了,感觉应该网络问题,不知原因但完美解决
- where的顺序对运行的影响--无影响
2.表连接的时候,大表与小表的顺序是哪个在前.3.在多表连接时,是表与表先连接起来,再执行对单表的限制条件where条件:还是先执行单表的限制where条件,再进行表连接?4.多表连接时,如4个表,我 ...
- U深度U盘安装win7系统教程
① 使用u深度u盘启动盘制作工具制作好的启动u盘 点击查看 ==>u深度u盘启动盘制作教程 ② ghost win7系统镜像文件(自可上网自行搜索ghost xp系统) 第一步:下载win7系统 ...
- python 学习笔记 字符串和编码
字符编码:因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理,最早的计算机在设计时采用8个比特(bit)作为一个字节 (byte),所以,一个字节能表示的最大的整数是255(二进 ...
- 项目导入时报错:The import javax.servlet.http.HttpServletRequest cannot be resolved 解决方法
Error: The import javax.servlet cannot be resolved The import javax.servlet.http.HttpServletRequest ...
- Pamulinawen--IPA--菲律宾伊洛卡诺语
这是一首菲律宾的民谣(不是他加禄语/Tagalog, 而是伊洛卡诺语/Ilokano), 我们国家的著名歌手朱明瑛也翻唱过, 歌曲中文名为<<田野之歌>>.
- Android : 获取声卡信息的测试代码
完整的编译包(android平台): 链接:http://pan.baidu.com/s/1qXMTT7I 密码:2bow /* * ALSA parameter test program * * C ...