我有这段代码,当try块中的close方法被调用时,我想用mockito抛出一个ioexception
public static void cleanup(Logger log, Closeable... closeables) {
for (Closeable c : closeables) {
if (c != null) {
try {
c.close();
} catch (IOException e) {
if (log != null) {
log.warn("Exception in closing " + c, e);
}
}
}
}
}
这是我在测试方法中尝试的,但显然不起作用:
OutputStream outputStream = Mockito.mock(OutputStream.class);
doThrow(new IOException()).when(outputStream).close();
cleanup(log, closeables);
我怎样才能实现我的目标?谢谢!
2条答案
按热度按时间vhmi4jdf1#
您需要确保将mock作为第二个参数传递给
cleanup
方法。以下测试对我有效:
这个
cleanup
方法看起来是正确的。无需更改。b1zrtrql2#
我对这个词的用法做了一些研究
doThrow(new Exception())
在javadoc mockito文档中。这段核心文档告诉我,为了让存根对象抛出异常,语法是when(yourStub.method()).doThrow(new Exception())
对于返回void和when(yourStub.method()).thenThrow(new Exception())
对于返回除void以外的任何内容的方法。简而言之,配置抛出异常的调用应该是when(outputStream.close()).doThrow(new IOException())
.此外,您需要将outputstream作为第二个参数传递给cleanup函数,正如petr在回答中指出的那样。另外,如果您计划向cleanup函数传递一个closable,那么它可能需要重构以获取一个closable,而不是一个closable集合,就像您的问题一样。