【发布时间】:2021-02-25 15:18:36
【问题描述】:
在 JUnit5 中,我如何验证是否曾经抛出异常但后来在执行期间被捕获? 例如,考虑
public Optional<Foo> MethodA(Argument a) {
try {
/*
Some logic based on Aargument a providing biproduct Argument b
*/
methodB(b)
/*
some other logic capable of throwing exception
*/
} catch(Exception e) {
// log exception
return Optional.empty();
}
}
private BReturnValue MethodB(Argument b) throws Exception{
throw new IllegalStateException()
}
现在无论哪种方法,无论 A 还是 B 抛出异常,作为 MethodA 的返回值,我都会收到一个空的 Optional,因此我不能使用 assertThrows() 但我实际上正在测试一个会导致 MethodB 的测试用例抛出异常。
我可以,如果可以,我如何验证在执行期间是否从MethodB 引发了异常?
注意
- 目前我正在使用 2 个测试,一个用于验证是否返回了空 Optional,另一个用于通过手动提供
biproduct argument并使用assertThrows()直接调用 MethodB()。
但我正在寻找更好的方法来验证 biproduct argument 是由 MethodA 形成的,并且 methodB 引发了异常。而且我不想直接测试MethodB,而是通过MethodA。
【问题讨论】: