【问题标题】:Unit testing of ServletsServlet 的单元测试
【发布时间】:2013-04-07 05:08:27
【问题描述】:
我需要围绕一个将 HttpServletRequest 和 HttpServletResponse 对象作为参数的函数编写单元测试。
如果我创建这两个对象(请求和响应)的模拟,其中一个对象的变化将如何反映在另一个对象中。
例如。如果我想围绕我在响应对象中设置标头的代码进行单元测试。
response.addHeader("X-UA-Compatible", "IE=EmulateIE7");
让我知道如何进行。
【问题讨论】:
-
尝试使用here 定义的框架之一。这将使您的生活更轻松。
-
标签:
java
unit-testing
servlets
【解决方案1】:
在您的模拟库中,将有一些方法可以断言某个方法已被调用。因此,您的测试代码将包含如下语句:
// psuedo-code
assertThat(mockResponse).addHeader("X-UA-Compatible", "IE=EmulateIE7");
在我使用过的模拟框架(JMock、Mockito)中,模拟对象之间没有自动协作。因此,除非您声明一个,否则您的嘲笑 HttpServletRequest 将与您嘲笑的 HttpServletResponse 没有关系。
【解决方案3】:
问题在于标准模拟,它们会为您创建一个代理。所以你可能永远不知道代码调用后是否设置了正确的值
response.addHeader("X-UA-Compatible", "IE=EmulateIE7");
如果您自己创建存根,那么您实际上可以验证方法调用中设置的内容。但是这种方法也有很多问题。