采用Struts2+Spring+Hibernate,控制层一段被测试的代码如下:
/**
* 删除费用
* @return
*/
public String doDeleteFeeRecord() {
String message = "";
PrintWriter pw = null;
String feeRecordId = request.getParameter("feeRecordId");
UserInfoVO userInfoVO = (UserInfoVO) session.get("userInfo");
try {
message = "{success:true}";
feeRecordService.deleteFeeRecord(feeRecordId );
logService.insertLog(userInfoVO.getLoginName(), "删除费用成功", request.getRemoteAddr(), 1);
} catch (FinanceException e) {
message = "{success:false}";
try {
logService.insertLog(userInfoVO.getLoginName(), "删除费用失败",request.getRemoteAddr(), 0);
} catch (FinanceException ex) {
request.setAttribute("errorText", ex.getMessage());
return "showWebError";
}
}
response.setContentType("text/json;charset=GBK");
try {
pw = response.getWriter();
pw.write(message);
pw.close();
} catch (IOException e) {
request.setAttribute("errorText", e.getMessage());
return "showWebError";
}
return null;
}
采用EasyMock对上面的代码进行测试,这个过程大致可以分为以下几个步骤:
使用 EasyMock 生成 Mock 对象;
设定 Mock 对象的预期行为和输出;
将 Mock 对象切换到 Replay 状态;
调用 Mock 对象方法进行单元测试;
对 Mock 对象的行为进行验证。
测试类如下:
public class TestFeeRecordAction {
private FeeRecordAction feeRecordAction = null;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
@Before
public void setUp() throws Exception {
ApplicationContext context = new FileSystemXmlApplicationContext("E:/software/Java/workstation/financeWeb/WebRoot/WEB- INF/FinanceContext.xml");
feeRecordAction = (FeeRecordAction) context.getBean("feeRecordAction");
}
@After
public void tearDown() throws Exception {
feeRecordAction = null;
}
@Test
public void testDoDeleteFeeRecord() throws IOException {
/**
* 生成Mock对象
*/
HttpServletRequest request = EasyMock.createMock(HttpServletRequest.class);
feeRecordAction.setServletRequest(request);
HttpServletResponse response = EasyMock.createMock(HttpServletResponse.class);
feeRecordAction.setServletResponse(response);
Map<String, UserInfoVO> map = new HashMap<String, UserInfoVO>();
UserInfoVO userInfoVO = new UserInfoVO();
userInfoVO.setLoginName("admin");
map.put("userInfo", userInfoVO);
feeRecordAction.setSession(map);
/**
* 设定 Mock 对象的预期行为和输出
*/
EasyMock.expect(request.getParameter("feeRecordId")).andReturn("1").once();
EasyMock.expect(request.getRemoteAddr()).andReturn("192.168.1.103").once();
PrintWriter pw = new PrintWriter(System.out, true);
EasyMock.expect(response.getWriter()).andReturn(pw).once();
/**
* 将 Mock 对象切换到 Replay 状态
*/
EasyMock.replay(request);
EasyMock.replay(response);
/**
* 调用 Mock 对象方法进行单元测试
*/
feeRecordAction.doDeleteFeeRecord();
pw.flush();
/**
* 对 Mock 对象的行为进行验证
*/
EasyMock.verify(request);
EasyMock.verify(response);
}
}
运行测试用例时,需要将方法doDeleteFeeRecord中的response.setContentType("text/json;charset=GBK");注释掉
分享到:
相关推荐
EasyMock 是一套通过简单的方法对于指定的接口或类生成 Mock 对象的类库,它能利用对接口或类的模拟来辅助...本文将向您展示如何使用 EasyMock 进行单元测试,并对 EasyMock 的原理进行分析。 标签:easyMock
easymock测试servlet使用代码
几个例子展示如何使用EasyMock进行单元测试
本文将对 EasyMock 的功能和原理进行介绍,并通过示例来说明如何使用 EasyMock 进行单元测试。 Mock 方法是单元测试中常见的一种技术,它的主要作用是模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与...
NULL 博文链接:https://xuan0506.iteye.com/blog/1041296
easyMock
Junit+EasyMock单元测试使用资料以及案例分析,供学习单元测试的朋友学习使用!
EasyMock单元测试的扩展;...EasyMock来进行测试; EasyMock如何打桩; EasyMock实践指南; EasyMock使用技巧; EasyMock使用简明手册; EasyMock使用说明; EasyMock使用手记; 用Mock object进行隔离测试;
easymock-2.5.2.jar easymock-2.5.2.jar 单元测试
EasyMock主要是为测试提供模拟数据,比如你可以模拟HttpServletRequest。
EasyMock 是一套通过简单的方法对于指定的接口或类生成 Mock 对象的类库,它能利用对接口或类的模拟来辅助单元测试。 Mock 方法是单元测试中常见的一种技术,它的主要作用是模拟一些在应用中不容易构造或者比较复杂...
JMock2.5.1和EasyMock3.0以及一些JUnit单元测试所需的jar,让你使用JMock和EasyMock时不用到处找相关的jar。
手动的构造 Mock 对象会给开发人员带来额外的编码量,而且这些为创建 Mock 对象而编写的代码很有可能引入错误。目前,有许多开源项目对动态...通过 EasyMock,我们可以方便的构造 Mock 对象从而使单元测试顺利进行。
easymock servlet 单元测试
easymock junit test 单元测试 java
easymock2 EasyMock使用简明手册
easyMock2.2
EasyMock.jar 单元测试模拟对象 为实现!!
NULL 博文链接:https://bruceliu02.iteye.com/blog/1775446
EasyMock是Java进行单元测试的一个工具,和JUnit搭配使用,该版本为3.2,该文件包括了doc文档,api文档,示例文档和所需jar包等。 该文件是从官网上下载的,请大家放心下载。