Skip to main content
3 月 5 日~ 6 日にサンフランシスコで開催される TDX (Salesforce+ でも配信) で「Developer Conference for the AI Agent Era (AI エージェント時代に向けた開発者向けカンファレンス)」にぜひご参加ください。お申し込みはこちら

予想時間

ポジティブテストを記述する

学習の目的

この単元を完了すると、次のことができるようになります。

  • ポジティブテストが重要な理由を説明する。
  • ポジティブ単体テストを記述する。
メモ

メモ

日本語で受講されている方へ
Challenge は日本語の Trailhead Playground で開始し、かっこ内の翻訳を参照しながら進めていってください。Challenge での評価は英語データを対象に行われるため、英語の値のみをコピーして貼り付けるようにしてください。日本語の組織で Challenge が不合格だった場合は、(1) この手順に従って [Locale (地域)] を [United States (米国)] に切り替え、(2) [Language (言語)] を [English (英語)] に切り替えてから、(3) [Check Challenge (Challenge を確認)] ボタンをクリックしてみることをお勧めします。

翻訳版 Trailhead を活用する方法の詳細は、自分の言語の Trailhead バッジを参照してください。

ポジティブ単体テストとは、テストするコードに有効なデータを渡したときに、期待どおりの結果が返されるテストです。昔ながらの計算機を思い浮かべてください。2 と 3 のデータポイントを使って加法のポジティブテストを実行すると、出力は必ず 5 になります。もちろん、これはごく単純な例ですが、考え方は同じです。有効なデータを使ってコードのテストを実行すると、予測可能な結果が​​返されます。 

始める前に

事前に、単元 1 でパッケージをインストールしたときに組織に追加された Apex クラスを取得しておきます。

  1. 左パネルの雲アイコンをクリックして、Org Browser を開きます。
    Org Browser
  2. [Apex Classes (Apex クラス)] をクリックし、ダウンロードボタンをクリックして Apex クラスを取得します。

Org Browser から Apex クラスを取得

  1. ファイルを上書きするよう指示するダイアログボックスが表示された場合は、[SkipAll] を選択します。

Org Browser がクラスを取得し終えると、ファイルにそのクラスが表示されます。

取得されたクラス

パターン

ポジティブ単体テストを記述するということは、適切であることがわかっているデータを入力して、期待どおりの結果を表示することです。ポジティブテストの標準モデルでは、次の手順を実行します。 

  1. テストデータを生成するか読み込みます。
    • データファクトリまたは CSV ファイルを使用します。
    • アサーションを実行して、データを検証します。
  2. Test.startTest() をコールします。
    • ガバナ制限がリセットされ、テストがテスト設定から切り離されます。
  3. テストするコードを実行します。
  4. Test.stopTest() をコールします。
    • 非同期コードが強制的に完了します。
  5. テストするコードの出力に関するアサーションを実行します。レコードが存在することや、項目が期待どおりの値に設定されていることをアサートすることが考えられます。

上記の手順をわかりやすく説明するために、VS Code の AccountWrapper クラスを見てみましょう。AccountWrapper クラスは、取引先オブジェクトを囲むカスタムロジックレイヤーです。これは、標準オブジェクトにカスタムロジックを追加するごく一般的な方法です。この場合は、取引先レベルのロジックを追加し、特定の取引先に関連付けられている商談の平均金額を四捨五入で算出します。 

AccountWrapper クラスを確認し、そのポジティブテストを記述しましょう。

  1. VS Code を開きます。
  2. [Explorer (エクスプローラー)] サイドバーで、classes フォルダーをクリックします。
  3. [AccountWrapper] クラスを選択します。これがテストするコードです。
  4. [Explorer (エクスプローラー)] サイドバーで、classes フォルダーを右クリックし、[SFDX: Create Apex Class (SFDX: Apex クラスを作成)] を選択します。[New File (新規ファイル)] コマンドは選択しないでください。このコマンドでは必要なメタデータの .xml ファイルが作成されません。
  5. 名前に AccountWrapperTests と入力し、デフォルトのディレクトリを受け入れます。
  6. デフォルトの内容を次のコードに置き換えます。
@IsTest
private class AccountWrapperTests {
  @TestSetup
  static void loadTestData() {
    // GIVEN
    Account acct = new Account(Name = 'ACME');
    insert acct;
    List<Opportunity> opps = TestFactory.generateOppsForAccount(acct.id, 1000.00, 5);
    insert opps;
  }
  @IsTest
  static void testPositiveRoundedAveragePrice() {
    // WHEN
    Account acct = [SELECT Id FROM Account LIMIT 1];
    AccountWrapper acctWrapper = new AccountWrapper(acct);
    // THEN
    Test.startTest();
      Assert.areEqual(
        1000.00,
        acctWrapper.getRoundedAvgPriceOfOpps(),
        'Expected to get 1000.00');
    Test.stopTest();
  }
}
  1. [File (ファイル)] > [Save (保存)] をクリックします。
  2. 作業中のファイルを右クリックして、[SFDX: Deploy Source To Org (SFDX: 組織にソースをリリース)] を選択します。
  3. testPositiveRoundedAveragePrice メソッドに表示される [Run Test (テストを実行)] ボタンをクリックします。

コードのポイント

このテストクラスは、各取引先に 5 件の商談を生成する TestFactory クラスを使用します。 

取引先と商談を使用して、accountWrapper の getRoundedAvgPriceOfOpps() メソッドのロジックをテストできます。このメソッドは、取引先に関連するすべての商談の平均価格を千の位に四捨五入して返すように記述されています。これはポジティブテストであるため、読み込んだデータと生成した商談は、メソッドが必要とするものと論理的に一貫しています。つまり、商談金額は正の値で、四捨五入された平均額は容易に予測がつく値です。「適切なコードに適切な値を入力すれば、期待どおりの結果が生成される」というのがポジティブテストの基本原理です。

リソース

ハンズオン Challenge

+500 ポイント

準備を始めましょう

この 単元 は各自のハンズオン組織で実行します。[起動] をクリックして開始するか、組織の名前をクリックして別の組織を選びます。

あなたの Challenge

Write a positive unit test
Open AccountWrapperTests.cls and add a test method that positively tests the isHighPriority() method.
  • Add a test method named testIsHighPriority to the AccountWrapperTests.cls that positively tests the isHighPriority() method.
  • Be sure to use @TestSetup methods to produce your test data
  • Run your unit tests and make sure you have at least 85% code coverage on the AccountWrapper.cls
Salesforce ヘルプで Trailhead のフィードバックを共有してください。

Trailhead についての感想をお聞かせください。[Salesforce ヘルプ] サイトから新しいフィードバックフォームにいつでもアクセスできるようになりました。

詳細はこちら フィードバックの共有に進む