【发布时间】:2017-04-10 02:15:58
【问题描述】:
我正在尝试验证我的所有异常是否正确。因为值包含在CompletableFutures 中,所以抛出的异常是ExecutionException,原因是我通常会检查的异常。快速示例:
void foo() throws A {
try {
bar();
} catch B b {
throw new A(b);
}
}
所以foo()翻译了bar()抛出的异常,所有这些都在CompletableFutures和AsyncHandlers内部完成(我不会复制整个代码,仅供参考)
在我的单元测试中,我让bar() 抛出一个异常,并想在调用foo() 时检查它是否被正确翻译:
Throwable b = B("bleh");
when(mock.bar()).thenThrow(b);
ExpectedException thrown = ExpectedException.none();
thrown.expect(ExecutionException.class);
thrown.expectCause(Matchers.allOf(
instanceOf(A.class),
having(on(A.class).getMessage(),
CoreMatchers.is("some message here")),
));
到目前为止一切顺利,但我也想验证异常 A 的原因是异常 B 和 having(on(A.class).getCause(), CoreMatchers.is(b)) 导致 CodeGenerationException --> StackOverflowError
TL;DR:我如何获得预期异常的原因?
【问题讨论】:
-
也许这个问题是你想要的(我不确定):stackoverflow.com/questions/871216/…
-
@RC。差不多了,但我必须更深入地了解下一个原因:)
标签: java junit exception-handling hamcrest expected-exception