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();
}
}

你可能感兴趣的:(eclipse,框架,JUnit,项目管理)