我需要围绕一个以 HttpServletRequest 和 HttpServletResponse 对象作为参数的函数编写单元测试。
如果我创建这两个对象(请求和响应)的模拟,一个中的变化将如何反映在另一个中。
前任。如果我想围绕我在响应对象中设置标头的代码进行单元测试。
response.addHeader("X-UA-Compatible", "IE=EmulateIE7");
让我知道如何进行。
我需要围绕一个以 HttpServletRequest 和 HttpServletResponse 对象作为参数的函数编写单元测试。
如果我创建这两个对象(请求和响应)的模拟,一个中的变化将如何反映在另一个中。
前任。如果我想围绕我在响应对象中设置标头的代码进行单元测试。
response.addHeader("X-UA-Compatible", "IE=EmulateIE7");
让我知道如何进行。
在您的模拟库中,将有一些方法可以断言方法已被调用。因此,您的测试代码将包含如下语句:
// psuedo-code
assertThat(mockResponse).addHeader("X-UA-Compatible", "IE=EmulateIE7");
在我使用的模拟框架(JMock、Mockito)中,模拟对象之间没有自动协作。因此,除非您声明一个,否则您的 mockedHttpServletRequest
将与您的 mocked 没有关系。HttpServletResponse
Spring 框架提供了 aMockHttpServletRequest
和 a MockHttpServletResponse
。
问题在于标准模拟,它们会为您创建一个代理。所以你可能永远不知道代码调用后是否设置了正确的值
response.addHeader("X-UA-Compatible", "IE=EmulateIE7");
如果您自己创建存根,那么您实际上可以验证方法调用中设置的内容。但是这种方法也有很多问题。