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()を書くようにしよう。