我已经模拟了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()
我对我的控制器要求的内容最不感兴趣,我只关心它应该吃掉服务抛出的异常。相应地,我创建了一个昵称模拟请求。为什么我仍然会收到此错误?
答案 0 :(得分:3)
除非你从代码片段中删除它,否则你似乎没有在NiceMock上调用replay
。这将使其脱离“记录”模式并使其可用。
答案 1 :(得分:0)
除上述答案外,您是否考虑过使用Spring Mock?它非常支持模拟,并提供了许多类,这些类不需要使用easymock来支持Web容器测试。
此框架可以独立于Spring使用,您的应用程序不需要使用Spring Framework。这也是nice article ......
希望有所帮助。