88
75

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Visual Studio Code で Salesforce の Apex テストを実行・デバッグする

Last updated at Posted at 2018-10-20

Salesforce 公式の Visual Studio Code (VS Code) 拡張機能であるSalesforce Extensions for VS Codeは、Salesforce CLI のコマンド群を実行できるコア機能に加えて、Apex テストについても豊富な機能を提供しています。この記事では、公式の VS Code 拡張機能を用いた基本的な Apex テストの実行・確認方法やApex Replay Debugger を用いたデバッグログの分析方法を紹介します。

準備

開発環境の設定方法は、以下の記事をご確認ください。
Visual Studio Code で Salesforce の開発環境を構築する

Apexテストの実行

VS Code で Apex テストを実行するには以下の方法があります。

開いているファイルから実行

@isTest アノテーションが付与された Apex クラスまたはメソッドにはそれぞれRun All TestsRun Testのリンクが表示されます。これらをクリックするとテストが実行できます。
スクリーンショット 2018-10-15 23.20.28.png

サイドバーから実行

ビーカーのアイコンスクリーンショット 2018-10-20 0.06.59.pngからApexテスト用のサイドバーを表示します。再生ボタン:arrow_forward:をクリックしてテストを実行できます。
スクリーンショット 2018-10-15 23.25.42.png

コマンドパレットから実行

コマンドパレットを起動 (Ctrl+Shift+P/Cmd+Shift+P) し、SFDX: Invoke Apex Tests... を実行後、実行したいテストクラスを選択することでもテストを実行できます。
スクリーンショット 2018-10-15 23.30.54.png

テスト結果の確認

実行した Apex テストの結果を確認するには以下の方法があります。

サイドバーで結果を確認する

スクリーンショット 2018-10-20 0.05.42のコピー.jpg Pass したテストは緑色、Fail したテストは赤色アイコンで表示されます。また、テストクラスにカーソルを合わせるとサマリが表示されます。 ### コンソールの出力で結果を確認する メッセージは出力タブから確認できます。 Apex test result in output panel

テスト結果にカバレッジを追加する

settings.json"salesforcedx-vscode-core.retrieve-test-code-coverage":true を追加すると、出力タブからカバレッジを確認できます。

--codecoverage option

直後にフッターの Highlight Apex Code Coverage ボタンHighlight Apex Code Coverage buttonをクリックし対象の Apex クラスを開くとカバレッジを視覚的に確認できます。

Apex Visual Code Coverage Example

匿名実行

  • 開いているファイルをそのまま匿名実行する場合は、コマンドパレットからSFDX: Execute Anonymous Apex with Editor Contentsを実行します。
    • 補完が効きませんが、テキストファイルであれば拡張子は.clsである必要はありません。
  • 開いているファイルの一部を匿名実行する場合は、対象の文字列を選択している状態で、コマンドパレットを起動しSFDX: Execute Anonymous Apex with Currently Selected Textを実行します。

デバッグログの確認

シンプルにログだけ取得するには、コマンドパレットからSFDX : Get Apex Debug Logs...を実行後(ログの一覧が表示されるまで少し時間がかかることがあります)、取得したいログを選択します。

Apex Replay Debuggerでログを解析する

Apex Replay Debugger は、公式の拡張機能に含まれる、デバッグログの分析機能です。ビデオを録画して再生するように、トランザクションを記録し、ログに基づいてトランザクションをシミュレートします。一般的な対話型デバッガのように、ブレークポイントの設定やその時点での変数の状態を解析することができます。ちなみに名前が似ているApex Debuggerは、スクラッチ組織やISVの顧客のSandboxをリアルタイムでデバッグするための機能です。

1. 事前設定

デバッグのサイドバーを開き、「構成の追加」→「Apex Replay Debugger」を選択します。.vscodeフォルダにlaunch.jsonファイルが作成されます。既にlaunch.jsonがある場合はReplay Debugger用の構成が追加されますので保存します。
スクリーンショット 2018-10-20 14.02.54.png

2. ブレークポイント・チェックポイントの設定

ブレークポイントを設定するには、ApexクラスまたはApexトリガを開き、ブレークポイントを設定したい行番号の左隣をクリックします。
スクリーンショット 2018-10-20 14.19.25.png
ブレークポイントよりも詳細な情報をデバッグ時に取得するには、チェックポイントを設定します。コードの行の実行時にヒープダンプが取得されるため、トリガーコンテキスト変数の値など、デバッグログに残らない情報を取得することができます。チェックポイントを設定するには、対象の行にカーソルを合わせた状態で、コマンドパレットから、SFDX: Toggle Checkpointを実行します。チェックポイントを設定後、これを組織に反映させるため、コマンドパレットからSFDX: Update Checkpoints in Orgを実行します。なお、一度に設定できるチェックポイントの数は最大で 5 つまでです。

3. ログレベルの設定・デバッグログの取得

Apex Replay Debugger を実行するためには、ログレベルの設定が、APEX_CODEFINESTVISUALFORCEFINERまたはFINESTに設定されている必要があります。コマンドパレットからSFDX: Turn On Apex Debug Log for Replay Debuggerを実行するか、手動でログレベルを変更しておきます。その後、何らかの方法でデバッグログを出力(例えば、画面を開く、レコードをバックグラウンドで更新する、Apex テストや匿名実行する、など)し、前述のSFDX : Get Apex Debug Logs...コマンドでログを取得します。

4. Apex Replay Debugger を起動する

デバッグログファイルを開き、エディタの任意の箇所で右クリックし(またはコマンドパレットから) SFDX: Launch Apex Replay Debugger with Current Fileを選択します。
続行ボタン (F5) Continueをクリックする度に、設定したブレークポイント・チェックポイントにおける変数の値やコールスタックなどを左サイドバーで確認できます。
Apex replay debugger example
デバッグについては VS CodeのDocs も合わせて参考にしてください。

考慮事項

  • SFDX: Turn On Apex Debug Log for Replay Debuggerで設定したログレベルやSFDX: Update Checkpoints in Orgで設定したチェックポイントの有効期間は 30 分です。
  • スケジュール Apex が生成するログは Replay できません。
  • 1 度に 1 つのログしか Replay できないため、非同期 Apex のように複数のログを出力する場合は注意が必要です。

参考リンク

88
75
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
88
75

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?