4.TestNG 预期异常测试

Posted by Shen's Blog on Tuesday, December 6, 2022

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
===============================================

效果大差不差。