Apexテストクラスで例外の発生を検証する

Apexのテストクラスで例外を検証する方法を記載する。

以下はテスト対象のクラス例

public class SampleClass {
    
    public static boolean isGreaterThanTen(String val){
        
        if(String.isBlank(val) || !val.isNumeric()){
            throw new IllegalArgumentException('Illegal');
        }
        
        return Integer.valueOf(val) > 10;
    }
}

引数の文字列が数値で10より大きければtrueを返却し、数値でないものが入力されたらIllegalArgumentExceptionを発生させるサンプルになっている。

例外の発生をテストする際は、以下のように記載する

@IsTest
private class SampleClassTest {
    
    @IsTest
    static void alphabetTest(){
        
        Test.startTest();        
        try {
            boolean ret = SampleClass.isGreaterThanTen('a');
            Assert.fail();
        } catch(IllegalArgumentException e){
            System.assertEquals('Illegal' , e.getMessage());
        }
        Test.stopTest();
    }
}

ポイントは2点ある。

  • テスト対象メソッド呼び出しをtryの中で行い、catchでassertする
  • テスト対象メソッド呼び出し直後にAssert.fail()を記載する

特に重要なのは2点目のAssert.fail()だ。

万が一isGreaterThanTenで期待通りに例外が発生しなかった場合、Assert.fail()がないとテストが通過してしまうことになる。

例外の発生をテストする場合、必ず正常なルートにAssert.fail()を書くようにしよう。