EasyMock入门

今天是我第一次在javaeye上发帖子,希望能保持下去
学习了EasyMock,就小小的做个总结
EasyMock是用于JUnit中的虚拟测试辅助包,它提供对interface类的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令EasyMock是放在sourceforge上的一个开源项目,,可以自由下载,从那里下载到对应版本的压缩包后可以直接解压,对于开发 ,我们只需要easymock.jar这个文件,把它添加到Eclipse的项目jar库里就可以使用了。另外,由于它是用于在JUnit环境下测试的包,所以在实际使用的时候还需要添加JUnit.jar

EasyMock createStrictControl() 录制顺便和调用顺序一致 createControl() 调用顺序和录制顺序无关 expect(***).andReturn(resutl).times(x).andThrow(e) 该方法是对一个对象的方法进行打桩***代表哪个方法的调用,如:userService.doSth();代表返回值x:代表调用预期的调用次数 e:代表该方法应该跑出的异常EasyMock.expectLastCall() 对最近一个对象进行打桩,该方法的返回值和expect(***)返回值一致,也可设置调用次数和是否抛出异常,对于void方法,不能用expect进行打桩,可以用该方法进行打桩
MockControl、Mock MockControl是控制类,他负责建立整个框架所需的资源, Mock对象对应一个你需要测试的待测试类,一个control可以同时管理多mock
MockControl的reset()、replay()、verify() createMock(Class c) 给出一个类名或接口,不需要实现,对其进行打桩 reset() 方法是将control对象复位,
replay() 结束录制过 程, verify() 用于在录制和回放两个步骤完成之后进行预期和 实际结果的检查,如果预期结果和实际结果不一致会抛出异常
下面是一个例子
UserService 接口

public interface UserService {

public User getUserByID(Integer id) throws Exception;
}

ExceptionTest 接口

public interface ExceptionTest {
public void doThisWhenException() throws Exception;
public int getInteger() throws Exception;
}
测试类 Test

import org.easymock.EasyMock;
import org.easymock.IMocksControl;

public class Test {

/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {

//初始化值
User boy = new User();
boy.setId(1);
boy.setName("boy");

User girl = new User();
girl.setId(2);
girl.setName("girl");
//创建mock容器,可以创造多个模拟的对象,调用顺序和录制顺序一致
//IMocksControl control = EasyMock.createStrictControl();
//调用顺序和录制顺序无关
IMocksControl control = EasyMock.createControl();
System.out.println("one ----------------");
if(true){
//----------------------------------mock对象和录制方法的返回值 开始----------------------------------------------
//根据UserService 借款mock出一个对象
UserService userService = control.createMock(UserService.class);
ExceptionTest et = control.createMock(ExceptionTest.class);
//设置传入参数和返回值
EasyMock.expect(userService.getUserByID(1)).andReturn(boy);
//设置调用次数
EasyMock.expect(userService.getUserByID(2)).andReturn(girl).times(1);
//EasyMock.expect(userService.getUserByID(2)).andReturn(girl).anyTimes();
//设置跑出异常行为
EasyMock.expect(userService.getUserByID(3)).andThrow(new Exception("人妖")).times(1);
EasyMock.expect(userService.getUserByID(0)).andReturn(null);
EasyMock.expect(et.getInteger()).andReturn(1);
//EasyMock.expectLastCall().times(1);
//设置调用几次,下面的为设置调用两次
//EasyMock.expectLastCall().andThrow(new Exception("手动抛出异常"));
et.doThisWhenException();
//对于最近的一个方法录制
//EasyMock.expectLastCall().andThrow(new Exception("手动抛出异常"));
//----------------------------------mock对象和录制方法的返回值 结束----------------------------------------------
//让mock的对象生效,必须使用
control.replay();
//----------------------------------逻辑业务对象和录制方法的返回值 开始----------------------------------------------
User newUser1 = userService.getUserByID(1);
User newUser2 = userService.getUserByID(2);
User newUser0 = userService.getUserByID(0);
System.out.println("是否返回空 "+(newUser0==null));
System.out.println("id is " + newUser1.getId()
+" name is " + newUser1.getName());
System.out.println("id is " + newUser2.getId()
+" name is " + newUser2.getName());
Integer ei = et.getInteger();
System.out.println(ei);
try{
userService.getUserByID(3);
}catch(Exception e){
et.doThisWhenException();
e.printStackTrace();
}
//----------------------------------逻辑业务对象和录制方法的返回值 结束----------------------------------------------
//看期望值和实际值是否一致
control.verify();
}
//重置mock容器
control.reset();
System.out.println("two ----------------");
if(true){
//根据UserService 借款mock出一个对象
UserService userService = control.createMock(UserService.class);
EasyMock.expect(userService.getUserByID(1)).andReturn(boy);
//录制结束
control.replay();
User newUser = userService.getUserByID(1);
System.out.println("new User id is "+ newUser.getId());


control.verify();
}
}
}
测试类 TestParam

import org.easymock.EasyMock;
import org.easymock.IMocksControl;

public class TestParam {


public static void main(String[] args) throws Exception {

User boy = new User();
boy.setId(1);
boy.setName("boy");

IMocksControl control = EasyMock.createControl();
UserService userService = control.createMock(UserService.class);
//设置任何数字的参数都返回boy
EasyMock.expect(userService.getUserByID(EasyMock.anyInt()))
.andReturn(boy);
control.replay();
User newUser = userService.getUserByID(1);
System.out.println(newUser.getName());
control.verify();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值