【问题标题】:Why Easymock throws error for a nicemock?为什么 Easymock 会为 nicemock 抛出错误?
【发布时间】:2012-12-05 21:33:34
【问题描述】:

我已经模拟了 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。为什么我仍然会收到此错误?

【问题讨论】:

    标签: easymock illegalstateexception


    【解决方案1】:

    除非您从您的 sn-ps 代码中删除它,否则您似乎没有在 NiceMock 上调用 replay。这会将其移出“记录”模式并使其可用。

    【讨论】:

    • 具体来说需要replay(request, service);以你为例。您实际上确实有 replay(endPoint),这在您的示例中未声明。请检查这是否仅在此示例中或您的实际编码中存在错误(在手动重构后可能很容易发生)。
    【解决方案2】:

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

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

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-10
      • 2019-06-13
      • 2021-06-17
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多