2022/04/20

Salesforceにおけるサブセットとは?実行方法や結果取得方法を解説

 
  

Salesforceにおけるサブセットとは?

サブセットとはその名の通り全体の一部、機能制限という意味でフルセットの対義語です。サブセットは、一部のデータを本番データや大規模のデータベースから保持または、抽出します。開発の際に必要な情報だけを社内のチームメンバーと共有、開発できます。 テストのサブセットを実行することによって、機密データが誤って情報開示されてしまったとしても、リスクを軽減できるのです。 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.htm

Salesforceのメタデータ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でサブセットを活用して開発に役立てよう!

今回はサブセットについてと、Salesforceでのサブセットの実行と注意点について紹介していきました。 サブセットは、必要な情報だけをチームメンバーと共有やテストができます。機密情報が漏れてもリスクを軽減できるメリットや、テストのレベルによってリリースで実行されるテスト制限が強化される場合があります。 リリース時にサブセットを実行すると、本番環境へのリリース時間を短縮できますので、とてもスムーズになります。ぜひ覚えておきましょう。]]>

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

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

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】