セーブポイントが見つからない

【Apex】テストクラスの書き方

こんにちは、にいるです。

今回は、Apexの「テストクラスの書き方」について、書いてみたいと思います。

【ヘルプ】Test クラス
【ヘルプ】ベストプラクティスのテスト

1.テストクラスとは

テストクラスとは、作成したApexクラスが正常に動くかどうかを検証するための機能です。
品質の確認に使用される値は、コードカバー率で最大100%です。

単体テストのコードカバー率が75%を超えていて、テストクラスの全テストメソッドが成功していればリリースが可能になります。

Apexクラスを書くことができれば、テストクラスも問題なく書けると思います。
ただテスト特有のメソッドやアノテーションがあるので、そこは新しく理解しなければいけないポイントです。

2.テストクラスの書き方

①テストクラスで使用するテストデータを@setupアノテーションが付与されたメソッドで作成します。
②テストメソッド1です。(テストメソッドは自由に追加できます。)
③テストデータを更新しています。
④テストメソッド2です。
⑤今度は@setupで作成したテストデータをメソッド2で呼び出しています。
⑥Test.startTest〜Test.stopTest間でガバナ制限がリセットされていることを確認しています。

■デバッグ結果
 

 

ここで覚えておきたいのが、Test.startTest〜Test.stopTestで行う処理には新しいガバナ制限のセットが付与されることです。
なので、@setupでどれだけSOQLやDMLを実行していても、このTest.startTest〜Test.stopTestを使用すれば、正しいガバナ制限を考慮した設計ができます。

また、テストデータをメソッドで更新しても、そのメソッド内では更新されますが、他のメソッド実行時には@setupで作成されたテストデータにリセットされます。
これはsetupメソッドが静的であるためです。

3.テストクラス作成の考慮事項

  • System.debugはApexコードカバー率の対象外です。
  • Apexコードは単体テストでカバー率が75%を超えている必要があります。
  • テストデータはユーティリティクラスで作成するか、静的リソースを使用して保持した方がいいです。
  • テストメソッド間ではトランザクションは保持されません。
  • IsTest(SeeAllData=true)を使用すれば、組織の実データにアクセスできますが、価格表などの一部データは他のメソッドを使用する必要があります。
  • 4.まとめ

    いかがでしたでしょうか。

    テストクラスは開発する上で必ず必要な機能です。
    単体で75%以上のカバー率が必要となりますが、できる限り100%で実装できるように努めましょう。

    皆さんもぜひ色々と試してみてください。
    他にも色々と標準機能やSalesforce機能について紹介していますので、ご覧ください。

    ではでは!