Ich versuche, JUnit mit MockitoJUnitRunner schreiben. Ich übergebe Datei-ID an meine Funktion, die Datei aus der Cloud herunterlädt und Zip-Datei als Download zurückgibt. hier ist mein CodeAntwort in zipoutputstream bestätigen
public void getLogFile(HttpServletResponse response, String id) throws IOException {
response.setContentType("Content-type: application/zip");
response.setHeader("Content-Disposition", "attachment; filename=LogFiles.zip");
ServletOutputStream out = response.getOutputStream();
ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(out));
zos.putNextEntry(new ZipEntry(id));
InputStream inputStream = someDao.getFile(id);
BufferedInputStream fif = new BufferedInputStream(inputStream);
int data = 0;
while ((data = fif.read()) != -1) {
zos.write(data);
}
fif.close();
zos.closeEntry();
zos.close();
}
Und meine JUnit-Funktion ist
@Mock
private MockHttpServletResponse mockHttpServletResponse;
anyInputStream = new ByteArrayInputStream("test data".getBytes());
@Test
public void shouldDownloadFile() throws IOException {
ServletOutputStream outputStream = mock(ServletOutputStream.class);
when(mockHttpServletResponse.getOutputStream()).thenReturn(outputStream);
=> when(someDao.download(anyString())).thenReturn(anyInputStream);
controller.getLogFile(mockHttpServletResponse, id);
verify(mockHttpServletResponse).setContentType("Content-type: application/zip");
verify(mockHttpServletResponse).setHeader("Content-Disposition","attachment; filename=LogFiles.zip");
verify(atmosdao).download(atmosFilePath);
}
Diese Einheit Test vorbei ist, aber ich möchte, um zu überprüfen, was auf output geschrieben ist, wie kann ich es tun? wie ich zu „Testdaten“ verspottet schreibe output wie
anyInputStream = new ByteArrayInputStream("test data".getBytes());
when(someDao.download(anyString())).thenReturn(anyInputStream);
mockHttpServletResponse.getContentAsString()
gibt mir null!
Ist es möglich, MockHttpServletResponse
zu behaupten, die mit zipoutputStream geschrieben wird? Wenn ja, wie kann ich es tun?
Danke.
public class CustomOutputStream extends ServletOutputStream {
private ByteArrayOutputStream out = new ByteArrayOutputStream();
private String content;
@Override
public void write(int b) throws IOException {
out.write(b);
}
@Override
public void close() throws IOException {
content = new String(out.toByteArray());
out.close();
super.close();
}
public String getContentAsString() {
return this.content;
}
}
Diese Klasse speichert alle Bytes geschrieben, um es und sie im content
Feld halten:
Das funktioniert! Danke Hugo ... – Ali
Gern geschehen, gerne helfen –
Hallo Hugo, gibt es eine Möglichkeit zu überprüfen, ob Zip-Datei in Outputstream vorhanden ist? – Ali