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);