EasyMock.replay()有什么用
现在很多项目都使用EasyMock来作为单元测试框架。
EasyMock一个方法,基本上是三步:EasyMock.expect()、EasyMock.replay()、EasyMock.verify()。
在写单元测试的时候按这三步写,并不清楚EasyMock.replay()到底有什么作用。
因为在很多单元测试里,把EasyMock.replay()去掉并不影响单元测试的运行。
@Test
public void queryBookListTest() { EasyMock.expect(myDatabase.queryList()).andReturn(null); List<Book> bookList = bookDaoImpl.queryBookList(); Assert.assertTrue(bookList == null);
}

那么EasyMock.replay()到底有什么作用呢,在什么情况下才必须要有EasyMock.replay()单元测试才能正常运行呢?
来看一下必须有EasyMock.replay()才能正常运行的情况:
源码:
@Override
public List<Book> queryBookList() { List<Book> bookList = database.queryList();
if (bookList == null) {
bookList = database.queryList();
}
return bookList;
}
单元测试代码:
@Test
public void queryBookListTest() { EasyMock.expect(myDatabase.queryList()).andReturn(null);
EasyMock.expect(myDatabase.queryList()).andReturn(null); mockControl.replay(); List<Book> bookList = bookDaoImpl.queryBookList(); mockControl.verify(); Assert.assertTrue(bookList == null);
}
运行结果:

来看看把EasyMock.replay()去掉会怎样:
@Test
public void queryBookListTest() { EasyMock.expect(myDatabase.queryList()).andReturn(null);
EasyMock.expect(myDatabase.queryList()).andReturn(null); List<Book> bookList = bookDaoImpl.queryBookList(); Assert.assertTrue(bookList == null);
}
运行结果:

可以看到,报错了,单元测试没有运行成功。
当代码里涉及到同一个接口方法多次调用时,如果仅仅是在单元测试里EasyMock方法,而没有replay()时,在单元测试运行的时候,是无法对接口方法进行Mock的。
EasyMock.replay()是将Mock的行为按照Mock的步骤重发一遍,在单元测试运行的时候,就能够正确的执行了。
EasyMock.replay()有什么用的更多相关文章
- 测试--easymock的使用
使用场景:对于调用其它类中的方法,但是还没有编写完,使用easymock进行单元测试,它提供这些没有编写完的代码期待的默认值. 使用步骤: step1: pom引入: <dependency&g ...
- easymock+junit+spring学习·
Easymock学习 Author:luojie 1. Easymock简介 EasyMock 是一套通过简单的方法对于指定的 ...
- easymock入门贴
from:http://macrochen.iteye.com/blog/298032 关于EasyMock常见的几个问题, 这里(http://ozgwei.blogspot.com/2007/06 ...
- 使用 EasyMock 更轻松地进行测试
from:http://www.ibm.com/developerworks/cn/java/j-easymock.html 测试驱动开发是软件开发的重要部分.如果代码不进行测试,就是不可靠的.所有代 ...
- EasyMock使用手记
from:http://www.blogjava.net/supercrsky/articles/162766.html Mock 对象能够模拟领域对象的部分行为,并且能够检验运行结果是否和预期的一致 ...
- 【JUnit】EasyMock用法总结
使用EasyMock的总体步骤 1.生成Mock接口 IService mockService = EasyMock.createMock("name", IService.cla ...
- [置顶] EasyMock的简单使用
EasyMock总览 下面,我将讲述如何使用JUnit和EasyMock框架来进行单元测试. 在现实情况下,我们通常是在一些类里使用另外的一些类.在进行真正的测试之前,你可能需要做很多的工作,比喻说安 ...
- EasyMock入门
这是一个JavaProject,有关EasyMock用法详见本文测试用例 首先是用到的实体类User.java package com.jadyer.model; public class User ...
- 使用EasyMock对Servlet进行简单的测试
这是一个WebProject,但不需配置web.xml,因为EasyMock用不上它 首先是用到的实体类User.java package com.jadyer.model; public class ...
随机推荐
- 枚举在switch中的运用
Season.java package com.sxt.utils.enum2; public enum Season { 春,夏,秋,冬; } TestSeason.java package com ...
- 2019-10-22-win7-无法启动-WPF-程序-D3Dcompiler_47.dll-丢失
title author date CreateTime categories win7 无法启动 WPF 程序 D3Dcompiler_47.dll 丢失 lindexi 2019-10-22 18 ...
- OpenStack组件系列☞horizon搭建
第一步:部署horizon环境: 安装部署memcache 安装软件包 yum install memcached python-memcached 启动memcache并且设置开机自启动 syste ...
- 从DataTable中删除不被控件支持的字段类型
DataTable dt = DB.GetDataTable(sql); //从dt中删除不被控件支持的字段类型 for (int ...
- 插入blob字段的简单方法
1. 按普通方法组织插入语句 ,f2为Blob型字段 insert into table (f1,f2,f3) values ('a',:para,'c') 2.对应每个blob型字段,OracleC ...
- @loj - 6353@「CodePlus 2018 4 月赛」组合数问题 2
目录 @description@ @solution@ @accepted code@ @details@ @description@ 请你找到 k 个不同的组合数,使得对于其中任何一个组合数 \(C ...
- 安装visualStudio 出现 cant install Microsoft.TeamFoundation.OfficeIntegration.Resources
本文告诉大家在安装 VisualStudio 时出现cant install Microsoft.TeamFoundation.OfficeIntegration.Resources如何安装 如果在安 ...
- 防止SyntaxHighlighter.js的闪烁闪一下的方法
SyntaxHighlighter.js是一个代码高亮的JS插件,使用也很简单,但是由于是浏览器段执行JS代码来着色,会出现视觉上闪一下的效果.比如你的20行代码网页打开显示高度为100px,但是Sy ...
- codeforces 609B
#include<bits/stdc++.h> using namespace std; ]; int main() { memset(num,,sizeof(num)); int n,m ...
- C++调用Lua编程环境搭建及测试代码示例
C++调用Lua编程环境搭建及测试代码示例 摘要:测试环境是VS2005+LuaForWindows_v5.1.4-45.exe+WIN7 1.安装lua开发环境LuaForWindows_v5.1. ...