我倾向于尽可能多地进行检查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
吗?