我们在工作中使用 JUnit 3,并且没有 ExpectedException
注释。我想在我们的代码中添加一个实用程序来包装它:
try {
someCode();
fail("some error message");
} catch (SomeSpecificExceptionType ex) {
}
所以我尝试了这个:
public static class ExpectedExceptionUtility {
public static <T extends Exception> void checkForExpectedException(String message, ExpectedExceptionBlock<T> block) {
try {
block.exceptionThrowingCode();
fail(message);
} catch (T ex) {
}
}
}
但是,我认为 Java 不能在 catch block 中使用通用异常类型。
如何解决 Java 限制?
有没有办法检查 ex
变量的类型是否为 T
?
最佳答案
您可以传入 Class 对象并以编程方式对其进行检查。
public static <T extends Exception> void checkForException(String message,
Class<T> exceptionType, ExpectedExceptionBlock<T> block) {
try {
block.exceptionThrowingCode();
} catch (Exception ex) {
if ( exceptionType.isInstance(ex) ) {
return;
} else {
throw ex; //optional?
}
}
fail(message);
}
//...
checkForException("Expected an NPE", NullPointerException.class, //...
我不确定你是否想要重新抛出;重新抛出同样会导致测试失败/错误,但在语义上我不会,因为它基本上意味着“我们没有得到我们预期的异常”,因此这表示编程错误,而不是测试环境错误。
关于java - 在 Java 中捕获一个通用异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3024654/