在開始前先大概了解下 Java 中異常的分類有兩種異常:Error 和 Exception
Error:稱為錯誤,由Java虛擬機生成并拋出,包括動態(tài)連接失敗、虛擬機錯誤等,程序?qū)ζ洳蛔鎏幚?

Exception:所有異常類的父類,其子類對應(yīng)了各種各樣可能出現(xiàn)的異常,
Exceptin 中最常見的是RuntimeException ,運行時異常,如被0除,數(shù)組下標(biāo)超范圍等,這類異??梢越挥上到y(tǒng)自動檢測并將它們交給缺省的異常處理程序(用戶可不必對其處理),自定義異常也屬于運行時異常。
但除了RuntimeException的Exception:必須catch ,在JDK里寫了throw的必須的catch一般需要用戶顯式的聲明或捕獲
我們在運行過程中測試方法可能會拋出一個運行時異常,比如下面的例子:

運行時異常
有時候我們需要做異常測試,比如某個接口調(diào)用在一定條件條件下,我們希望得到一個異常的結(jié)果,TestNG 通過 ExpectedExceptions可以驗證測試代碼中的符合預(yù)期異常拋出,在上面代碼的基礎(chǔ)上增加 @Test(expectedExceptions = ArithmeticException.class),從下面圖中可以看出運行結(jié)果是成成功

自定義異常
首先定義一個自定義異常:
public class OrderSaveException extends RuntimeException {
public OrderSaveException(String message) {
super(message);
}
}
在其他方法拋出自定義異常:
public class OrderBo {
public void save(Order order) throws OrderSaveException {
// 如果傳入的order對象是null就會拋出自定義異常
if (order == null) {
throw new OrderSaveException("Order is empty!");
}
}
}
定義Order類:
public class Order {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
在測試中驗證
public class MyTest{
OrderBo orderBo = new OrderBo();
Order data = new Order();
// 因為沒有對Order中的字段賦值所以 data 一定是null,此時運行結(jié)果一定失敗,拋出自定義異常
@Test()
public void throwIfOrderIsNull() throws OrderSaveException {
orderBo.save(null);
}
}

現(xiàn)在增加異常測試,測試結(jié)果是成功的:
