java - catch block 直接父类和子类处理异常有什么区别

标签 java exception-handling

我有以下 Java 代码

import org.testng.annotations.Test;

@Test
public void testException(){
    try{
        Assert.assertEquals(1,2);
    } catch(Exception e) {
      e.printStackTrace();
    }
}

当测试运行时,断言失败并且异常被打印为标准输出并且 TestNG 将测试结果显示为 FAILED。

如果我使用

捕获相同的异常
catch(AssertionError e){
    e.printStackTrace();
}

异常被打印为错误输出,TestNG 显示测试结果为 PASSED。在这两种情况下都处理异常,但这里有什么区别?

最佳答案

AssertionError 不是 Exception 的子类(它是 Error 的子类),所以第一个片段, catch(Exception e) 处理程序,未捕获它。因此测试结果为FAILED。

第二个代码片段捕获了异常,因此对于TestNG而言,testException()的测试没有出现异常,结果为PASSED。

关于java - catch block 直接父类和子类处理异常有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35987218/

相关文章:

java - 为什么日期选择器会意外触发 JComboBox 的 actionPerformed?

java - 如何将 Guice 和 Mapstruct 结合起来?

java - 为什么 DAO 方法在 ORMLite 中这么慢?

java - Guava 缓存和保留检查的异常

java - 如何用一个打印 "root cause first"堆栈跟踪替换 JUnit 4.12 中的全局异常处理程序?

java - 为什么在尝试编写 catch 时必须有抛出异常的可能性是强制性的?

java - Hadoop Iterator 在第一次迭代时跳过方法调用

java - 动画是抽象的,无法实例化

java - 如果没有人调用interrupt(),是否可以忽略InterruptedException?

python-3.x - 无法捕获TweepError异常