Java单元测试验证ServletOutputStream

Java单元测试验证ServletOutputStream,java,servlets,junit4,Java,Servlets,Junit4,我编写了一个JUnit4单元测试来验证servlet响应,servlet响应有两个附加字段,分别对应于0和字节流的长度。这些没有添加到servlet调用中,可能是在内部完成的 我无法将整数添加到字节数组中进行比较。每个项目都作为字节数组进行比较。如何在单元测试中验证servlet响应 @Mock private HttpServletRequest httpServletRequest; @Mock private HttpServletResponse httpServletResponse

我编写了一个JUnit4单元测试来验证servlet响应,servlet响应有两个附加字段,分别对应于
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。@jbniset
ByteArrayOutputStream
不幸地不满足类型
ServletOutputStream
,不能直接使用。