JUnit:可以“期待”一个包装的异常吗?
我知道可以在JUnit中定义一个“预期”异常,做:
@Test(expect=MyException.class)
public void someMethod() { ... }
但是,如果总是有相同的异常被抛出,但具有不同的“嵌套”原因,该怎么办?
有什么建议吗?
我知道可以在JUnit中定义一个“预期”异常,做:
@Test(expect=MyException.class)
public void someMethod() { ... }
但是,如果总是有相同的异常被抛出,但具有不同的“嵌套”原因,该怎么办?
有什么建议吗?
从 JUnit 4.11 开始,您可以使用规则的 expectCause()
方法:ExpectedException
import static org.hamcrest.CoreMatchers.*;
// ...
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Test
public void throwsNestedException() throws Exception {
expectedException.expectCause(isA(SomeNestedException.class));
throw new ParentException("foo", new SomeNestedException("bar"));
}
您可以将测试代码包装在 try/ catch 块中,捕获引发的异常,检查内部原因,记录 / 断言 / 任何内容,然后重新抛出异常(如果需要)。