调试时,我使用Mockito 1.10遇到了令人难以置信的奇怪现象。我希望有人可以解释这里的行为:
当我运行以下命令时,我的线程挂起,并且测试永不返回。创建的Java进程的CPU也是天文数字!
@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());
}
任何了解模仿方法为何以及为何失败的帮助都是非常棒的。
如果查看ByteStreams实现,则可以看到使用了read(buf)方法。在您的情况下,它返回null,因为没有模拟定义,这将导致copy方法中的无限循环。
您可以更改默认的模拟行为,也可以手动为read(buff)方法添加定义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句