通过catch块直接处理父类和子类之间的异常有什么区别

sta*_*low 5 java exception-handling

我有以下Java代码

import org.testng.annotations.Test;

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

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

如果我使用相同的异常

catch(AssertionError e){
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

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

Era*_*ran 6

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

第二个片段捕获了异常,因此就a TestNG而言,测试中没有异常testException(),结果是PASSED.