我倾向于尽可能多地进行检查Exceptions:它使代码变得杂乱无章(我认为检查Exceptions是 Java 的一个可疑方面)。我倾向于在“优化”代码时使用它们。即,当它对特定上下文有意义时。
当覆盖不抛出所需的超类/接口方法时,这种方法会稍微复杂一些Exception,因此我倾向于这样做:
@Override
public void close() {
try {
_close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
where_close是处理所有业务的私有方法。
当涉及到 JUnit 时,如果你真的想测试抛出异常的东西,_close()那么结果RuntimeException似乎是由 JUnit 以“无条件”的方式处理的:它似乎总是以失败消息停止测试。 ..即使你真的抓住并处理它try .. catch!
我发现了一种“解决方法”(CUT 类在关闭closeableComponents时将其全部关闭):
@Test (expected = RuntimeException.class)
public void errorFlagShouldBeSetIfAnyCloseablesThrowExceptionWhenCUTCloses() throws Exception {
Closeable spyCloseable = spy( new Closeable(){
@Override
public void close() throws IOException {
throw new IOException( "dummy" );
}});
spyCUT.addCloseableComponent( spyCloseable );
Exception blob = null;
try{
spyCUT.close();
}catch( Exception e ){
blob = e;
}
assertThat( spyCUT.getErrorFlag() ).isTrue();
if( blob != null ){
throw blob;
}
即,如果您没有此expected设置,您总是会遇到测试失败(因为RuntimeException“忽略” try .. catch)。但是为了满足expected你必须RuntimeException在测试结束时重新抛出...
...有什么方法可以改变 JUnit 的处理方式RuntimeExceptions吗?