このチュートリアルでは、TestNG `expectedExceptions`を使用してコード内の予想される例外スローをテストする方法を説明します。

1.ランタイム例外

この例では、実行時例外をテストする方法を示します。 `divisionWithException()`メソッドがランタイム例外 – ArithmeticException`をスローすると、それは渡されます。

TestRuntime.java

package com.mkyong.testng.examples.exception;

import org.testng.annotations.Test;

public class TestRuntime {

    @Test(expectedExceptions = ArithmeticException.class)
    public void divisionWithException() {
        int i = 1/0;
    }

}

上記の単体テストがパスされます。

2.チェック例外

シンプルなビジネスオブジェクトをレビューし、メソッドを保存して更新し、エラーの場合はカスタムのチェック例外をスローします。

OrderBo.java

package com.mkyong.testng.project.order;

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 the database
    throw new OrderNotFoundException("Order is not exists");

  }
}

予想される例外をテストする例

TestCheckedException.java

package com.mkyong.testng.examples.exception;

import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import com.mkyong.testng.project.order.Order;
import com.mkyong.testng.project.order.OrderBo;
import com.mkyong.testng.project.order.OrderNotFoundException;
import com.mkyong.testng.project.order.OrderSaveException;
import com.mkyong.testng.project.order.OrderUpdateException;

public class TestCheckedException {

  OrderBo orderBo;
  Order data;

  @BeforeTest
  void setup() {
    orderBo = new OrderBo();

    data = new Order();
    data.setId(1);
    data.setCreatedBy("mkyong");
  }

  @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);
  }

}

上記の単体テストがパスされます。

ソースコードをダウンロードする

それをダウンロードする:

TestNG-Example-Excepted-Exception.zip

(11 kb)