EasyMock学习:

 

EasyMock的应用分为5步:

1.使用 EasyMock生成 Mock对象;

ServletRequestrequest = EasyMock.createMock(ServletRequest.class);

 

如果是一个相对复杂的测试用例,需要对多个接口生成mock对象,使用MockControl来管理:

IMocksControlcontrol = EasyMock.createControl();

SomeInterfacemockObj = control.createMock(SomeInterface.class);

AnotherInterfacemockAnotherObj = control.createMock(AnotherInterface.class);

 

2.设定 Mock对象的预期行为和输出;

EasyMock.expect(request.getAttribute("name")).andReturn("alex");

 

如果是一个返回void的方法调用:

mockObj.noReturnValueAction();

expectLastCall(); // 最新版本的EasyMock可以忽略此句

 

3.Mock对象切换到 Replay状态;

EasyMock.replay(request);

 

对于使用control来管理的情况:

control.replay();

 

4.调用 Mock对象方法进行单元测试

System.out.println(request.getAttribute("name")); //print"alex"

 

5.Mock对象的行为进行验证,验证确实执行了方法,如果没有执行,会抛异常的.

EasyMock.verify(request);

 

对于使用control来管理的情况:

control.verify();

 

6.如何创建一个需要严格遵守调用顺序的mock对象?

SomeInterfacemockObj = createStrictMock(SomeInterface.class);

 

7.期望一个方法始终返回期望的值,而不管调用次数:

expect(mockObj.someAction(1)).andStubReturn("one");

等价于

expect(mockObj.someAction(1)).andReturn("one").anyTimes();

 

设定确定的调用次数:

expect(mockObj.someAction(1)).andReturn("one").times(3);

 

期望抛出异常:

expect(mockObj.someAction(1)).andThrow(someException);

 

8.参数匹配

任意参数:

expect(mockObj.someAction(anyInt())).andStubReturn("one");

当然,相应的有anyObject(),anyChar()等等。

 

在参数上应用逻辑操作:

expect(mockStatement.executeQuery(and(startsWith("select"),endsWith("order;")))).andReturn(mockResultSet);

 

9.asyMock在录制的时候最典型的写法:

expect(mockEmployeeRepository.findByFirstNameAndLastName("John","Doe")).andReturn(employees);

 

10.如果有个要录制的方法只知道类型不知道具体的值,可以这样写:

expect(mockEmployeeRepository.findBySpecification(isA(EmployeeSearchSpecification.class)).andReturn(employees);

posted on 2010-12-14 22:50  菊次郎  阅读(336)  评论(0)    收藏  举报