[英]How to use ArgumentCaptor to verify bytes written to HttpServletResponse
I have a controller that provides functionality to download the file. 我有一个控制器,提供下载文件的功能。
@ResponseBody
public void downloadRecycleResults(String batchName, HttpServletResponse response) throws Exception {
File finalResultFile = null;
// code here generates and initializes finalResultFile for batchName
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + finalResultFile.getName());
IOUtils.copy(new FileReader(finalResultFile), response.getOutputStream());
}
I am not able to figure out how to write test where I can verify the contents which were written to response
. 我无法弄清楚如何编写测试,我可以验证写入
response
的内容。 I have used ArgumentCaptor
lot but somehow it doesn't seem to fit here. 我已经使用了
ArgumentCaptor
很多但不知何故它似乎不适合这里。
controller.downloadRecycleResults("batchName", mock(HttpServletResponse.class));
verify(response).getOutputStream(); // but how to capture content?
As suggested by David, I was able to do so. 正如大卫所说,我能够这样做。
ServletOutputStream opStreamMock = mock(ServletOutputStream.class);
when(response.getOutputStream()).thenReturn(opStreamMock);
ArgumentCaptor<byte[]> captor = ArgumentCaptor.forClass(byte[].class);
verify(opStreamMock).write(captor.capture(), Mockito.anyInt(), Mockito.anyInt());
//can create reader now.
BufferedReader reader = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(captor.getValue())));
一种方法是模拟response
及其输出流,然后验证对模拟输出流的write
方法的调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.