この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

ベストプラクティスのテスト

効果的なテストでは、次のことを行います。
  • 可能な限り多くのコード行をカバーする。Apex をリリースまたは Salesforce AppExchange 用にパッケージ化する前に、次の条件を満たす必要があります。
    • Apex コードの少なくとも 75% が単体テストでカバーされており、かつすべてのテストが成功している。
    • すべてのトリガについて何らかのテストを行う。
    • すべてのクラスとトリガが正常にコンパイルされる。
    次の点に注意してください。
    • 本番組織に Apex をリリースするときに、組織の名前空間内の各単体テストがデフォルトで実行されます。
    • System.debug へのコールは、Apex コードカバー率の対象とはみなされません。
    • テストメソッドとテストクラスは、Apex コードカバー率の対象とはみなされません。
    • Apex コードの 75% が単体テストでカバーされて��る必要がありますが、カバー率を上げることだけに集中すべきではありません。アプリケーションのすべての使用事例 (正・誤両方の場合や単一データだけでなく複数データの場合) の単体テストを作成するようにしてください。このアプローチにより、75% 以上の単体テストのカバー率を達成できます。

    重要

  • コードで条件ロジック (3 項演算子など) を使用する場合は、各ブランチを実行する。
  • 有効な入力および無効な入力を使用してメソッドへのコールを行う。
  • エラーが予期され、trycatch ブロックで捕捉されない限り、例外が発生することなく正常に完了する。
  • 例外を捕捉するだけでなく、捕捉されたすべての例外を処理する。
  • System.assert メソッドを使用して、コードが適切に動作することを検証する。
  • runAs メソッドを使用して、さまざまなユーザコンテキストでアプリケーションをテストする。
  • 一括トリガ機能を実行する。テストで最低 20 件のレコードを使用する。
  • ORDER BY キーワードを使用し、レコードが予期された順序で返されるようにする。
  • レコード ID が順序立っていることを想定しない。

    複数のレコードを同じ要求で挿入しない限り、レコード ID は昇順で作成されません。たとえば、取引先 A を作成し、ID 001D000000IEEmT を受信した後で取引先 B を作成した場合、取引先 B の ID が次に大きい順序になる場合とならない場合があります。

  • テストデータを次のように設定する。
    • テストクラスで必要なデータを作成して、テストが特定の組織のデータに依存する必要がないようにする。
    • Test.startTest メソッドをコールする前にすべてのテストデータを作成する。
    • テストでは何も確定しないため、データを削除する必要がない。
  • コメントの記述では、テストの内容だけでなく、テスト実施者によるデータに関する想定事項やテスト結果予測などを明記する。
  • アプリケーションで個別にクラスをテストする。1 回のテストでアプリケーション全体をテストしない。

データのプライバシーを保護するには、テストのエラーメッセージや例外の詳細に個人データが一切含まれないようにします。機密データがユーザ定義のメッセージや詳細に含まれているかどうかを Apex 例外ハンドラやテストフレームワークでは判断できません。カスタム Apex 例外に個人データを含めるには、個人データを保持する新しいプロパティを含む例外サブクラスを作成することをお勧めします。次に、サブクラスのプロパティ情報を例外のメッセージ文字列に含めないようにします。

メモ

多数のテストを実行している場合は、Salesforce ユーザインターフェースで [すべてのテストを実行] ボタンを使用してすべてのテストを同時に実行するのではなく、組織内のクラスを個別にテストします。

テストの並列実行のベストプラクティス

Salesforce ユーザインターフェース (開発者コンソールなど) から開始する複数のテストは並列して実施されます。テストを並列実行すると、テストの実行時間が短縮されます。テストの並列実行によってデータの競合の問題が生じることがありますが、そうした場合には並列実行をオフにできます。データの競合の問題や UNABLE_TO_LOCK_ROW エラーが生じる可能性があるのは、特に次のような場合です。
  • 複数のテストで同じレコードを同時に更新する場合。同じレコードが更新されるのは、通常、テストが独自のデータを作成せず、データの分離をオフにして組織のデータにアクセスする場合です。
  • 並列して実行しているテストで、インデックス項目値が重複しているレコードを作成しようしてデッドロックが発生する場合。デッドロックが生じるのは、実行中の 2 つのテストが相互にデータのロールバックを待機している場合です。2 つのテストが、一意のインデックス項目値が同じレコードを異なる順序で挿入したときにこのような待機が発生します。
こうしたエラーが発生しないようにするには、Salesforce ユーザインターフェースでテストの並列実行をオフにします。
  1. [設定] から、「Apex テスト」と入力します。
  2. [オプション...] をクリックします。
  3. [Apex テスト実行オプション] ダイアログで、[並列 Apex テストを無効化] を選択して、[OK] をクリックします。

テストクラスに IsTest(isParallel=true) アノテーションが付加されている場合、そのテストクラスを同時実行できること、およびデフォルトの同時テストクラス数より多く同時実行できることを示します。このアノテーションはデフォルト設定よりも優先されます。