我有以下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。在这两种情况下都会处理异常,但这有什么区别?
答案 0 :(得分:6)
AssertionError
不是Exception
的子类(它是Error
的子类),所以第一个片段带有catch(Exception e)
处理程序,没有抓住它。因此测试结果为FAILED。
第二个片段捕获了异常,因此就TestNG
而言,testException()
的测试中没有异常,结果已通过。
答案 1 :(得分:2)
因为AssertionError
是Throwable
和Error
的孩子,而不是来自Exception
:
java.lang.Object
java.lang.Throwable
java.lang.Error
java.lang.AssertionError
所以这一行:
catch(Exception e){
在出错的情况下不会抓住它。你能做的是:
catch(Error e){
或
catch(Throwable t){
但你必须小心explained here