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);
浙公网安备 33010602011771号