为什么Easymock会因为一个好莱坞而引发错误?

时间:2012-03-22 05:18:15

标签: easymock illegalstateexception

我已经模拟了HttpServletRequest,这是我测试中的一项服务:

request = createNiceMock(HttpServletRequest.class);
service = createStrictMock(DataProviderService.class);

我正在通过设置expectaion来验证我的控制器处理服务引发的异常的行为:

expect(service.getData(someObject)).andThrow(new MyException());
replay(endPoint);

我验证了相同的内容:

ModelAndView mav = controller.provideDefaultScreen(request);
verify(service);

我的控制器调用服务,如果发生异常,请在请求中设置异常详细信息

request.setAttribute("exceptionMessage", e.getMessage());

此行抛出错误:

java.lang.IllegalStateException: missing behavior definition for the preceding method call:
HttpServletRequest.getAttribute("someAttributeCheckedEarlier")
Usage is: expect(a.foo()).andXXX()

我对我的控制器要求的内容最不感兴趣,我只关心它应该吃掉服务抛出的异常。相应地,我创建了一个昵称模拟请求。为什么我仍然会收到此错误?

2 个答案:

答案 0 :(得分:3)

除非你从代码片段中删除它,否则你似乎没有在NiceMock上调用replay。这将使其脱离“记录”模式并使其可用。

答案 1 :(得分:0)

除上述答案外,您是否考虑过使用Spring Mock?它非常支持模拟,并提供了许多类,这些类不需要使用easymock来支持Web容器测试。

此框架可以独立于Spring使用,您的应用程序不需要使用Spring Framework。这也是nice article ......

希望有所帮助。