Во время отладки я наткнулся на что-то невероятно странное, используя Mockito 1.10. Я надеялся, что кто-то сможет объяснить поведение, воспринимаемое здесь:Почему Mockito ведет себя странно с InputStreams?
Когда я запускаю следующее, моя нить зависает, и мой тест никогда не возвращается. Процессор Java-процесса, созданный, также становится астрономическим!
@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());
}
Когда я вручную окурок этот метод следующим образом, ожидаемый IOException брошен:
@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());
}
Любая помощь в понимании, как и почему метод Mockito не удается бы фантастическим.
Я не знаю реализации 'ByteStreams.copy', но, возможно, он не вызывает' read() ', который читает один байт, а скорее вызывает' read (byte []) ' –
Я подозреваю, что' ByteStreams.copy() ' вызывает что-то еще в InputStream перед read(). Было бы очень полезно, если бы у нас был код этого класса, чтобы исследовать дальше. – Ray
ByteStreams - это библиотека GoogleGuava для этого. Я думаю, вы оба здесь правы. Когда я шпионить класс, поведение преуспевает. Будем делать еще несколько исследований относительно того, какой метод это. –