【Salesforce】【資格】デベロッパー勉強メモ：テスト、デバッグ、リリース

デベロッパー試験勉強時にまとめたメモ書きです。内容が間違っていたら優しくご指摘ください。
他投稿は[デベロッパー試験に関する記事](#デベロッパー試験に関する記事)からどうぞ。

**あくまでも個人のメモ書きなので信用しすぎてはいけません。**
[参考](#参考)にSalesforce公式ページを載せていますので、最新かつ正しい情報をご確認ください。


# Testクラスのメソッド
　clearApexPageMessages()　Apex テストメソッドの実行中にVisualforceページのメッセージをクリアする
　getStandardPricebookId()　組織内の標準価格表のIDを取得する　★クエリの必要なし！！
　isRunningTest()　テストメソッドに含まれているコードによってコールされた場合trueを返す
　loadData(sObjectToken, resourceName)　指定した静的リソースCSVファイルからsObjectのリストを取得する
　setContinuationResponse(requestLabel, mockResponse)　テストメソッド内の継続HTTP要求に対する疑似応答を設定する
　setCreatedDate(recordId, createdDatetime)　テストコンテキストレコードのCreatedDateを設定する
　setCurrentPage(page)　Visualforceで使用されるコントローラの現在のPageReferenceを設定する
　setCurrentPageReference(page)　Visualforceで使用されるコントローラの現在のPageReference を設定する
　startTest()　テストが実際に開始されるときに、テストコードのポイントをマークします。 
　stopTest()　テストが終了するときに、テストコードのポイントをマークします。

:::note info
startTest()とstopTest()はガバナ制限をテストする場合に使用する
例：98件のSOQLクエリを作成した場合
　　　→startTest後プログラムは追加で100件のクエリを作成できる
　　　→stopTest後は元のコンテキストに戻り、制限に達するまで追加できるSOQLクエリは2件だけになる
:::

# 単体テストの考慮事項
・テストメソッドは、Webサービスコールアウトのテストには使用できない、疑似コールアウトを使用する
・テストメソッドからメールメッセージを送信することはできない
・テストメソッドはテストで作成したデータをコミットしない
・一意制約の項目を含む一部のsObjectでは、重複するレコードを挿入するとエラーになる

# デバッグログ
・デバッグログの有効　→開発者コンソールまたは [設定] で追跡フラグを設定
　※追跡フラグ＝デバッグレベル、開始時刻、終了時刻、ログ種別
・デバッグログの対象
　　データベースの変更
　　HTTPコールアウト
　　Apexエラー
　　Apexが使用するリソース
　　ワークフロールール
　　割り当てルール
　　承認プロセス
　　検証ルール（入力規則）
　　※時間ベースワークフローのアクションは含まれない
・ログレベル
　　（危険）ERRORーWARNーINFOーDEBUGーFINEーFINERーFINEST（安全）
　　※気にしすぎな人はFINESTを、あまり気にしない人はERRORを設定する
　　※INFO以下はDEBUG情報が出ない

# 開発者コンソール
・ログ表示　データベースイベント、Apex 処理、ワークフロー、および入力規則ロジックを含むデバッグログを検査できる
・チェックポイント　チェックポイントを設定できる、実行を一時停止することはできない（実行後に確認する）
・Apex編集　 Apexトリガおよびクラスを開いて編集できる
・Lightning編集　Lightning リソース (アプリケーション、コンポーネント、イベント、インターフェースなど) を開いて編集できる
・Visualforce編集　Visualforce ページを開いて編集できる
・Apexテスト　コードカバー率のチェックし、単体テスト、機能テスト、回帰テストなどの Apex テストを実行できる
・SOQL・SOSLクエリ実行　結果は、[Query Results] に表示され、レコードの作成、更新、削除ができる

# その他
・リリース時に「すべてのApexクラスとApexトリガの」のエラー　→　既存テストクラスの実行
・SeeAllData=trueはテストクラスでデータを作成できない場合に使う（できるだけつかわない）
　※ユーザ、プロファイル、組織、レコードタイプはSeeAllData=trueじゃなくても見れる
・``@future``はアサーションできない
・すべてのパラメータを使用して新しいコントローラをインスタンス化する
　controller.save().getUrl 戻り値はstring
・入力規則で落ちる場合　→　テストクラス内で有効テストデータ作成する　or　静的リソースから有効データを取得する
・テスト実行ができる場所　→　開発者コンソールTest、設定Apex テスト実行、Force.com IDEのRunTest

# 参考
↓Salesforce公式の開発者ガイドやヘルプページなどのリンクになっています
[Testクラス](https://developer.salesforce.com/docs/atlas.ja-jp.232.0.apexcode.meta/apexcode/apex_methods_system_test.htm#apex_System_Test_setCurrentPage)
[単体テスト](https://developer.salesforce.com/docs/atlas.ja-jp.232.0.apexcode.meta/apexcode/apex_testing_unit_tests.htm)
[デバッグログ](https://help.salesforce.com/s/articleView?id=sf.code_debug_log.htm&type=5)
[開発者コンソール](https://help.salesforce.com/s/articleView?id=sf.code_dev_console.htm&type=5)

# デベロッパー試験に関する記事
[Salesforce 認定 Platform デベロッパー 合格までのあれこれ](https://qiita.com/piepie1231/items/8da91897192dc44584be)
[デベロッパー勉強メモ：Salesforceの基本](https://qiita.com/piepie1231/items/bd94f6c3780f68b89251)
[デベロッパー勉強メモ：データモデリング](https://qiita.com/piepie1231/items/1ea83e14b553698f2aff)
[デベロッパー勉強メモ：プロセスの自動化とロジック①](https://qiita.com/piepie1231/items/407aad4ef1de5da297df)
[デベロッパー勉強メモ：プロセスの自動化とロジック②](https://qiita.com/piepie1231/items/e5eeb25ae2af0f79fd58)
[デベロッパー勉強メモ：ユーザインタフェース](https://qiita.com/piepie1231/items/179e5a39a98d65cb238d)
[デベロッパー勉強メモ：テスト、デバッグ、リリース](https://qiita.com/piepie1231/items/b90b82ec643b0cf5715b)　　←当記事