Java单元测试验证ServletOutputStream
我编写了一个JUnit4单元测试来验证servlet响应,servlet响应有两个附加字段,分别对应于Java单元测试验证ServletOutputStream,java,servlets,junit4,Java,Servlets,Junit4,我编写了一个JUnit4单元测试来验证servlet响应,servlet响应有两个附加字段,分别对应于0和字节流的长度。这些没有添加到servlet调用中,可能是在内部完成的 我无法将整数添加到字节数组中进行比较。每个项目都作为字节数组进行比较。如何在单元测试中验证servlet响应 @Mock private HttpServletRequest httpServletRequest; @Mock private HttpServletResponse httpServletResponse
0
和字节流的长度。这些没有添加到servlet调用中,可能是在内部完成的
我无法将整数添加到字节数组中进行比较。每个项目都作为字节数组进行比较。如何在单元测试中验证servlet响应
@Mock
private HttpServletRequest httpServletRequest;
@Mock
private HttpServletResponse httpServletResponse;
@Mock
private ServletOutputStream servletOutputStream;
@Test
public void testOutputStream() throws Exception {
when(httpServletResponse.getOutputStream()).thenReturn(servletOutputStream);
// Invoke servlet call
doGet.invoke(handle, httpServletRequest, httpServletResponse);
// Verify output stream
verify(servletOutputStream).write(out.getBytes());
}
参数不同!通缉:
servletOutputStream.write(
[(字节)0x23,(字节)0x45,(字节)0x58,(字节)0x54,(字节)0x4D,(字节)0x33,(字节)0x55,(字节)0x0A,(字节)0x23,(字节)0x45]
);
实际调用有不同的参数:
servletOutputStream.write(
[(字节)0x23,(字节)0x45,(字节)0x58,(字节)0x54,(字节)0x4D,(字节)0x33,(字节)0x55,(字节)0x0A,(字节)0x23,(字节)0x45],
0, 10
); 您不应该关心字节是如何写入流的:这是一个实现细节。您应该关心的是哪些字节正在写入流。传递一个真实的流而不是模拟流(例如ByteArrayOutputStream),然后检查ByteArrayOutputStream中包含的字节是否是您期望的字节。@谢谢您的建议。我传递了一个自定义的
ServletOutputStream
而不是一个有帮助的Mock。@jbnisetByteArrayOutputStream
不幸地不满足类型ServletOutputStream
,不能直接使用。