この記事の目次
Salesforceにおけるサブセットとは?

Salesforceのリリースでのテストのサブセット実行注意点
Salesforceのリリースでのテストのサブセット実行時の注意点を紹介していきます。 テストのレベルによってリリースで実行するテストの制御が強化されるので、Apexコンポーネントの場合は、リリース時にテストのサブセットを実行すると本番環境へのリリース時間を短縮できます。 また、本番環境のデフォルトのテスト実行動作も変更されていて、テストレベルが指定されていないときはデフォルトでリリースパッケージにApexクラスもしくはトリガが含まれる場合を除いて、テストが実行されないようになっているので注意してください。 リリースの失敗の原因になってしまうので、最初にSandboxでリリースをテストして、指定したクラスが各コンポーネントを十分にカバーしている事をチェックしましょう。 リリースのApexコンポーネントのコードカバー率が75%未満の場合や指定したテストのどれかに失敗した場合も同様にリリースの失敗の原因になってしまうので注意してください。 環境の全体的なコードカバー率が75%以上でもApexコンポーネントそれぞれのカバー率が75%未満のことがあるので、コードカバー率の要件を満たしていない場合は他のテストを記述してリリースに含めましょう。 出典:リリースでのテストのサブセットの実行|Salesforce公式サイト 参照:https://developer.salesforce.com/docs/atlas.ja-jp.api_meta.meta/api_meta/meta_deploy_run_specific_tests.htmSalesforceのメタデータAPIのApexコンポーネントのサブセットの場合
メタデータAPIのApexコンポーネントのサブセットを例に紹介します。 Salesforceのテストサブセットを実行するには、DeployOptionsオブジェクトに[RunSpecifiedTests]テストレベルを設定してください。その次に、DeployOptionsに実行する各テストクラスを指定します。最後に、DeployOptionsを引数としてDeploy()コールに渡します。 コードは以下の通りになります。
//DeployOptionsオブジェクトを作成します。
DeployOptions deployOptions = new DeployOptions();
//適切なテストレベルを設定します。
deployOptions.setTestLevel(TestLevel.RunSpecifiedTests);
//実行するテストクラスを指定します。
//文字列配列にはテストクラス名が含まれます。
String[] tests = {""TestClass1"", ""TestClass2"", ""TestClass3""};
//テストクラス名の配列を展開オプションに追加します。
deployOptions.setRunTests(tests);
//deployOptionsオブジェクトを引数として渡して、deploy()を呼び出します。
AsyncResult asyncResult = metadatabinding.deploy(zipBytes,deployOptions);
以下の点についても気をつけたいポイントなので考慮して実行を進めてください。
指定できるのはテストクラスのみで、それぞれのテストメソッドは指定できないので覚えておきましょう。また、リリース時間が短縮されるので、コードカバー率の要件を満たす最小限のテストを含めるようにテストクラスを再構成しましょう。
対象環境のトリガを無効化するには、以前有効な状態でリリースされたトリガを、無効な状態でリリースするようにしましょう。
SalesforceのAnt移行ツールでのサブセットの場合
主な条件は上記で説明したSalesforceのリリースでのテストのサブセット実行注意点とほとんど同じなので、この章ではその先について紹介していきます。 テストのサブセットを実行するには、testLevel=””RunSpecifiedTests””パラメータをリリースターゲットに追加します。 sf:deploy要素の中の<run Test></run Test>子要素に、リリースターゲットに実行する各テストクラスを指定していきます。 <run Test></run Test>タグ内にテストクラスを追加します。テストクラスに一つずつ<run Test>タグを追加していきます。 今回のリリースターゲットの例は、3つのテストクラスを示します。このパッケージのリリース時にSalesforceがこのテストクラスを実行します。
<target name=""deployCode"">
<sf:deploy username=""${sf.username}"" password=""${sf.password}""
sessionId=""${sf.sessionId}"" serverurl=""${sf.serverurl}""
deployroot=""codepkg"" testLevel=""RunSpecifiedTests"">
<runTest>TestClass1</runTest>
<runTest>TestClass2</runTest>
<runTest>TestClass3</runTest>
</sf:deploy>
</target>
テストクラス名は名前空間プレフィックスを含めることもできます。
チームに名前空間が定義されている場合や、テストクラスが管理パッケージに属する場合には名前空間プレフィックスを追加します。
例:名前空間がMyNamespaceのときはテストクラスをMyNamespace.TestClass1と指定します。
Salesforceでは名前空間プレフィックスの条件は「1文字目が英字になっている」「1〜15文字までの英数字を含んでいる」「アンダースコア(_)を2つ以上続けて入力されていない」の通りです。(例:123Company、my__npは使用できません。)
ターゲットで実行するテストクラスを指定しない場合は、本番環境へのリリース時にデフォルトのリリース動作が適用されます。デフォルトでは、インストール済みの管理パッケージから発生したテストを除いて、リリース時に組織全てのテストが実行されます。
デフォルトのコードカバー率要件も適応されます。この要件では、全てのクラスとトリガでの全体の最小カバー率が75%となっていて、トリガは0%のカバー率のものは許可されないので注意しましょう。
Salesforceでサブセットを活用して開発に役立てよう!

この記事の監修者・著者

-
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞