ポジティブテストを記述する
学習の目的
この単元を完了すると、次のことができるようになります。
- ポジティブテストが重要な理由を説明する。
- ポジティブ単体テストを記述する。
ポジティブ単体テストとは、テストするコードに有効なデータを渡したときに、期待どおりの結果が返されるテストです。昔ながらの計算機を思い浮かべてください。2 と 3 のデータポイントを使って加法のポジティブテストを実行すると、出力は必ず 5 になります。もちろん、これはごく単純な例ですが、考え方は同じです。有効なデータを使ってコードのテストを実行すると、予測可能な結果が返されます。
始める前に
事前に、単元 1 でパッケージをインストールしたときに組織に追加された Apex クラスを取得しておきます。
- 左パネルの雲アイコンをクリックして、Org Browser を開きます。

-
[Apex Classes (Apex クラス)] をクリックし、ダウンロードボタンをクリックして Apex クラスを取得します。

- ファイルを上書きするよう指示するダイアログボックスが表示された場合は、[SkipAll] を選択します。
Org Browser がクラスを取得し終えると、ファイルにそのクラスが表示されます。

パターン
ポジティブ単体テストを記述するということは、適切であることがわかっているデータを入力して、期待どおりの結果を表示することです。ポジティブテストの標準モデルでは、次の手順を実行します。
- テストデータを生成するか読み込みます。
- データファクトリまたは CSV ファイルを使用します。
- アサーションを実行して、データを検証します。
- データファクトリまたは CSV ファイルを使用します。
-
Test.startTest()をコールします。- ガバナ制限がリセットされ、テストがテスト設定から切り離されます。
- ガバナ制限がリセットされ、テストがテスト設定から切り離されます。
- テストするコードを実行します。
-
Test.stopTest()をコールします。- 非同期コードが強制的に完了します。
- 非同期コードが強制的に完了します。
- テストするコードの出力に関するアサーションを実行します。レコードが存在することや、項目が期待どおりの値に設定されていることをアサートすることが考えられます。
上記の手順をわかりやすく説明するために、VS Code の AccountWrapper クラスを見てみましょう。AccountWrapper クラスは、取引先オブジェクトを囲むカスタムロジックレイヤーです。これは、標準オブジェクトにカスタムロジックを追加するごく一般的な方法です。この場合は、取引先レベルのロジックを追加し、特定の取引先に関連付けられている商談の平均金額を四捨五入で算出します。
AccountWrapper クラスを確認し、そのポジティブテストを記述しましょう。
-
VS Code を開きます。
- [Explorer (エクスプローラー)] サイドバーで、
classesフォルダーをクリックします。
-
[AccountWrapper] クラスを選択します。これがテストするコードです。
- [Explorer (エクスプローラー)] サイドバーで、
classesフォルダーを右クリックし、[SFDX: Create Apex Class (SFDX: Apex クラスを作成)] を選択します。[New File (新規ファイル)] コマンドは選択しないでください。このコマンドでは必要なメタデータの .xml ファイルが作成されません。
- 名前に
AccountWrapperTestsと入力し、デフォルトのディレクトリを受け入れます。
- デフォルトの内容を次のコードに置き換えます。
@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();
}
}-
[File (ファイル)] > [Save (保存)] をクリックします。
- 作業中のファイルを右クリックして、[SFDX: Deploy Source To Org (SFDX: 組織にソースをリリース)] を選択します。
-
testPositiveRoundedAveragePriceメソッドに表示される [Run Test (テストを実行)] ボタンをクリックします。
コードのポイント
このテストクラスは、各取引先に 5 件の商談を生成する TestFactory クラスを使用します。
取引先と商談を使用して、accountWrapper の getRoundedAvgPriceOfOpps() メソッドのロジックをテストできます。このメソッドは、取引先に関連するすべての商談の平均価格を千の位に四捨五入して返すように記述されています。これはポジティブテストであるため、読み込んだデータと生成した商談は、メソッドが必要とするものと論理的に一貫しています。つまり、商談金額は正の値で、四捨五入された平均額は容易に予測がつく値です。「適切なコードに適切な値を入力すれば、期待どおりの結果が生成される」というのがポジティブテストの基本原理です。
リソース
