【问题标题】:Unit testing of ServletsServlet 的单元测试
【发布时间】:2013-04-07 05:08:27
【问题描述】:

我需要围绕一个将 HttpServletRequest 和 HttpServletResponse 对象作为参数的函数编写单元测试。

如果我创建这两个对象(请求和响应)的模拟,其中一个对象的变化将如何反映在另一个对象中。

例如。如果我想围绕我在响应对象中设置标头的代码进行单元测试。

response.addHeader("X-UA-Compatible", "IE=EmulateIE7");

让我知道如何进行。

【问题讨论】:

标签: java unit-testing servlets


【解决方案1】:

在您的模拟库中,将有一些方法可以断言某个方法已被调用。因此,您的测试代码将包含如下语句:

// psuedo-code
assertThat(mockResponse).addHeader("X-UA-Compatible", "IE=EmulateIE7");

在我使用过的模拟框架(JMock、Mockito)中,模拟对象之间没有自动协作。因此,除非您声明一个,否则您的嘲笑 HttpServletRequest 将与您嘲笑的 HttpServletResponse 没有关系。

【讨论】:

    【解决方案2】:

    Spring 框架同时提供MockHttpServletRequestMockHttpServletResponse

    【讨论】:

      【解决方案3】:

      问题在于标准模拟,它们会为您创建一个代理。所以你可能永远不知道代码调用后是否设置了正确的值

      response.addHeader("X-UA-Compatible", "IE=EmulateIE7");

      如果您自己创建存根,那么您实际上可以验证方法调用中设置的内容。但是这种方法也有很多问题。

      【讨论】:

        猜你喜欢
        • 2011-02-03
        • 1970-01-01
        • 2010-09-08
        • 1970-01-01
        • 1970-01-01
        • 2010-09-10
        • 1970-01-01
        • 2020-09-29
        • 1970-01-01
        相关资源
        最近更新 更多