[英]What is the difference between handling exceptions by catch block directly parent class and subclasses
我有以下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。
因為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){
但你必須小心,如此處所述
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.