0

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

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

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

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

我最不关心我的控制器对请求做了什么,我只担心它应该吃掉服务抛出的异常。相应地,我将请求创建为 nick mock。为什么我仍然会收到此错误?

4

2 回答 2

3

除非您从代码片段中删除它,否则您似乎没有调用replayNiceMock。这会将其移出“记录”模式并使其可用。

于 2012-03-29T08:47:17.507 回答
0

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

该框架可以独立于 Spring 使用,您的应用程序不需要使用 Spring Framework。这里也有一篇不错的文章...

希望有帮助。

于 2012-03-31T15:27:56.857 回答