3

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

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

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

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

让我知道如何进行。

4

3 回答 3

0

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

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

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

于 2013-04-15T06:48:42.910 回答
0

Spring 框架提供了 aMockHttpServletRequest和 a MockHttpServletResponse

于 2013-04-15T06:49:03.360 回答
0

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

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

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

于 2013-04-15T06:54:59.827 回答