jan*_*jan 9 java unit-testing servlets mocking mockito
我想用mockito测试我的servlet.我也想知道服务器输出是什么.所以如果servlet写出这样的东西:
HttpServletResponse.getWriter().println("xyz");
Run Code Online (Sandbox Code Playgroud)
我想把它写成文本文件.我为HttpServletResponse创建了模拟,并告诉Mockito如果调用了HttpServletResponse.getWriter(),它应该返回我的自定义PrintWriter:
HttpServletResponse resp = mock(HttpServletResponse.class);
PrintWriter writer = new PrintWriter("somefile.txt");
when(resp.getWriter()).thenReturn(writer);
Run Code Online (Sandbox Code Playgroud)
生成文本文件,但它是空的.我怎样才能使这个工作?
编辑:
@Jonathan:这实际上是真的,嘲笑作家也是一个更清洁的解决方案.解决了这个问题
StringWriter sw = new StringWriter();
PrintWriter pw =new PrintWriter(sw);
when(resp.getWriter()).thenReturn(pw);
Run Code Online (Sandbox Code Playgroud)
然后我可以检查StringWriter的内容,而不必处理文件.
如果您碰巧使用 Spring,那么它有一个 MockHttpServletResponse 类。
@Test
public void myTest() {
MockHttpServletResponse response = new MockHttpServletResponse();
// Do test stuff here
// Verify what was written to the response using MockHttpServletResponse's methods
response.getContentAsString();
response.getContentAsByteArray();
response.getContentLength();
}
Run Code Online (Sandbox Code Playgroud)
要查看任何输出,PrintWriter
您需要close()
或flush()
它。
PrintWriter
或者,您可以使用autoFlush
参数创建,例如:
final FileOutputStream fos = new FileOutputStream("somefile.txt");
final PrintWriter writer = new PrintWriter(fos, true); // <-- autoFlush
Run Code Online (Sandbox Code Playgroud)
println
当,printf
或被调用时,这将写入文件format
。
我想说关闭PrintWriter
是更好的选择。
在旁边:
你有没有考虑过嘲笑Writer
?您可以避免写入文件并验证预期的调用,例如:
verify(writer).println("xyz");
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4478 次 |
最近记录: |