TestNG 预期异常测试
在本教程中,我们将演示如何使用 TestNG expectedExceptions 来测试代码中的预期异常抛出。
创建一个名称为 ExpectedExceptionTest 的 Maven 工程。
1.运行时异常
此示例显示如何测试运行时异常。 如果 divisionWithException()
方法抛出一个运行时异常 — ArithmeticException
,它会获得通过。
创建一个测试文件:TestRuntime.java ,其代码如下所示
import org.testng.annotations.Test;
public class TestRuntime {
@Test(expectedExceptions = ArithmeticException.class)
public void divisionWithException() {
int i = 1 / 0;
System.out.println("After division the value of i is :"+ i);
}
}
日志如下:
===============================================
Default Suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================
2.检查异常
查看一个简单的业务对象,保存和更新方法,如果有错误,则抛出自定义检查的异常。
创建一个测试文件:OrderBo.java ,其代码如下所示:
public class OrderBo {
public void save(Order order) throws OrderSaveException {
if (order == null) {
throw new OrderSaveException("Order is empty!");
}
// persist it
}
public void update(Order order) throws OrderUpdateException, OrderNotFoundException {
if (order == null) {
throw new OrderUpdateException("Order is empty!");
}
// if order is not available in database
throw new OrderNotFoundException("Order is not exists");
}
}
Order.java
import lombok.Data;
/**
* @Description
* @Author syj <stepenshen@foxmail.com>
* @Version V1.0.0
* @Since 1.0
* @Date 2021/12/17
*/
@Data
public class Order {
private Integer id;
private String createdBy;
}
OrderNotFoundException.java
/**
* @Description
* @Author syj <stepenshen@foxmail.com>
* @Version V1.0.0
* @Since 1.0
* @Date 2021/12/17
*/
public class OrderNotFoundException extends Exception{
public OrderNotFoundException(String errorMsg){
super(errorMsg);
}
}
OrderSaveException.java
/**
* @Description
* @Author syj <stepenshen@foxmail.com>
* @Version V1.0.0
* @Since 1.0
* @Date 2021/12/17
*/
public class OrderSaveException extends Exception{
public OrderSaveException(String errorMsg){
super(errorMsg);
}
}
OrderUpdateException.java
/**
* @Description
* @Author syj <stepenshen@foxmail.com>
* @Version V1.0.0
* @Since 1.0
* @Date 2021/12/17
*/
public class OrderUpdateException extends Exception{
public OrderUpdateException(String errorMsg){
super(errorMsg);
}
}
TestCheckedException.java
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
public class TestCheckedException {
OrderBo orderBo;
Order data;
@BeforeTest
void setup() {
orderBo = new OrderBo();
data = new Order();
data.setId(1000);
data.setCreatedBy("maxsu");
}
@Test(expectedExceptions = OrderSaveException.class)
public void throwIfOrderIsNull() throws OrderSaveException {
orderBo.save(null);
}
/*
* Example : Multiple expected exceptions Test is success if either of the
* exception is thrown
*/
@Test(expectedExceptions = { OrderUpdateException.class, OrderNotFoundException.class })
public void throwIfOrderIsNotExists() throws OrderUpdateException, OrderNotFoundException {
orderBo.update(data);
}
}
运行日志如下:
===============================================
Default Suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================
效果大差不差。