Beim Debugging stieß ich mit Mockito 1.10 auf etwas sehr merkwürdiges. Ich hatte gehofft, dass jemand das hier wahrgenommene Verhalten erklären könnte:Warum verhält sich Mockito mit InputStreams seltsam?
Wenn ich Folgendes ausführe, hängt mein Thread und mein Test kehrt nie zurück. Die CPU des erstellten Java-Prozesses wird ebenfalls astronomisch!
@Test(expected = IOException.class)
public void nonMockitoExpected() throws IOException {
final InputStream mis = new InputStream() {
@Override
public int read() throws IOException {
throw new IOException();
}
};
ByteStreams.copy(mis, new ByteArrayOutputStream());
}
Jede Hilfe zu verstehen, wie und warum die Mockito Methode versagt wäre fantastisch:
@Test(expected = IOException.class)
public void mockitoWeirdness() throws IOException {
final InputStream mis = mock(InputStream.class);
doThrow(IOException.class).when(mis).read();
ByteStreams.copy(mis, new ByteArrayOutputStream());
}
Wenn ich diese Methode manuell Stummel wie folgt, wird der erwartete IOException geworfen.
Ich weiß nicht 'ByteStreams.copy' Implementierung, aber vielleicht ruft es nicht' read() 'das liest ein Byte, sondern ruft' read (byte []) ' –
Ich vermute, dass' ByteStreams.copy() ' ruft vor dem read() etwas anderes auf dem InputStream auf. Wäre sehr hilfreich, wenn wir diesen Code der Klasse hätten, um weiter zu untersuchen. – Ray
ByteStreams ist die GoogleGuava-Bibliothek dafür. Ich denke, Sie sind hier beide richtig. Wenn ich die Klasse ausspioniere, ist das Verhalten erfolgreich. Ich werde noch genauer untersuchen, welche Methode das ist. –