我倾向于投出尽可能多的支票 Exceptions
尽可能地向上:它将代码分离(我认为已检查) Exceptions
作为java的一个可疑方面)。我倾向于在“精炼”代码时使用它们。。i、 当它对特定的环境有意义时。
当重写不抛出必要的 Exception
因此我倾向于这样做:
@Override
public void close() {
try {
_close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
哪里 _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;
}
i、 如果你没有这个 expected
设置总是会导致测试失败(因为 RuntimeException
“忽略”了 try .. catch
). 但为了满足 expected
然后你必须重新播放 RuntimeException
考试结束时。。。
... 有没有办法改变junit对 RuntimeExceptions
?
1条答案
按热度按时间bq8i3lrv1#
你的设置一定有问题。junit对运行时异常没有任何这样的特殊处理。
我把这辆车组装起来;然后就过去了。
它不完全是你在那里的东西;但在我的脑海里“够近了”。
长话短说:你的答案来自其他地方。我建议:和我一样:创造一个真正的mcve;从那里开始工作!