Java powermockito-测试异常处理
测试剪报:Java powermockito-测试异常处理,java,powermockito,Java,Powermockito,测试剪报: void somefunction() { try { aMock.doSomething(); bMock.another(); } finally { cMock.cleanup(); } } 测试: 当我运行这个时,它通过了。为什么?抛出异常(以及@Test中的处理)是否胜过了verify语句 如果是-是否有某种方法来测试finally子句是否已执行?因为抛出了异常(实际上),所以函数代码下的所有内容都是死代码 outerMock.some
void somefunction() {
try {
aMock.doSomething();
bMock.another();
} finally {
cMock.cleanup();
}
}
测试:
当我运行这个时,它通过了。为什么?抛出异常(以及@Test中的处理)是否胜过了verify语句
如果是-是否有某种方法来测试finally子句是否已执行?因为抛出了异常(实际上),所以函数代码下的所有内容都是死代码
outerMock.somefunction(); // throw so, this is the end
// ------- dead code blow:
// ** THIS SHOULD FAIL
verify(bMock).another();
// ** THIS SHOULD FAIL TOO
verify(cMock, never()).cleanup()
因此,要测试finally块,必须使用正常执行(当没有异常发生时)。另一种解决方案是在测试中使用try/catch:
try {
outerMock.somefunction();
fail("was expecting an exception..");
} catch(Exception exception) {
// ignore
}
verify(bMock).another();
verify(cMock, never()).cleanup()
在评论中回答问题: 假设代码现在为:
void somefunction() {
try {
aMock.doSomething();
bMock.another();
} catch(Exception ex) {
cMock.handleException(ex);
}
}
测试可以是:
Exception testEx = new Exception("testing")
Mockito.when(aMock.doSomething()).thenThrow(testEx);
instance.somefunction();
Mockito.verify(cMock).handleException(testEx);
如果有一个“catch()”而不是“finally”,有没有办法让这项工作?如果生产代码中有一个catch,那么不会引发异常,也不会出现问题,这是什么意思?验证catch()中代码的操作/结果块。catch块中的操作可以通过与任何代码相同的方式进行验证。我将添加一个示例作为编辑器感谢更新/编辑。这是我所期待的道路,但不是我所看到的。我的代码一定有问题。
Exception testEx = new Exception("testing")
Mockito.when(aMock.doSomething()).thenThrow(testEx);
instance.somefunction();
Mockito.verify(cMock).handleException(testEx);