Apexでテスト実行時だけコードをスキップor実行する方法

By | June 20, 2021

結論

Apexテスト実行時だけコードを実行したい場合↓

if(Test.isRunningTest()){
   //テスト時だけ実行したい処理
}

Apexテスト実行時だけコードをスキップしたい場合↓

if(!Test.isRunningTest()){
   //テスト時だけスキップしたい処理
}

テスト時だけコード実行のユースケース

・catch文のテスト&カバレッジ確保のためにカスタムでエラーを投げたい場合

・テスト時にのみ求められる謎のValidationなどをカバーするためのデータの準備が必要な場合

テスト時だけコードスキップのユースケース

・実行したいコードがコード外部の世界(外部システムの処理や現実世界の時間)に依存していて、テストクラス内で用意するテストデータやモッククラスでは絶対に再現不可能である場合

・テストクラスでのみ特殊なValiadtionがかかる場合(例えば、B2B Commerce Cloudの「注文」レコードは「価格表への参照なく作成可能」かつ「絶対に参照があってはならない」が、テストクラスでは注文レコードの作成時に価格表への参照がないとエラーが発生してしまう。)

・テスト時に実行したくない処理がある場合(例えば、外部システムのマスタデータに変更を加える処理などがある場合、スキップしないとデータの不整合が発生してしまう。)