在开始前先大概了解下 Java 中异常的分类有两种异常:Error 和 Exception
Error:称为错误,由Java虚拟机生成并抛出,包括动态连接失败、虚拟机错误等,程序对其不做处理.
Exception:所有异常类的父类,其子类对应了各种各样可能出现的异常,
Exceptin 中最常见的是RuntimeException ,运行时异常,如被0除,数组下标超范围等,这类异常可以交由系统自动检测并将它们交给缺省的异常处理程序(用户可不必对其处理),自定义异常也属于运行时异常。
但除了RuntimeException的Exception:必须catch ,在JDK里写了throw的必须的catch一般需要用户显式的声明或捕获
我们在运行过程中测试方法可能会抛出一个运行时异常,比如下面的例子:
运行时异常
有时候我们需要做异常测试,比如某个接口调用在一定条件条件下,我们希望得到一个异常的结果,TestNG 通过 ExpectedExceptions可以验证测试代码中的符合预期异常抛出,在上面代码的基础上增加 @Test(expectedExceptions = ArithmeticException.class),从下面图中可以看出运行结果是成成功
自定义异常
首先定义一个自定义异常:
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,此时运行结果一定失败,抛出自定义异常
@Test()
public void throwIfOrderIsNull() throws OrderSaveException {
orderBo.save(null);
}
}
现在增加异常测试,测试结果是成功的: