Apexのテストクラスって、書くのが面倒ですよね。ロジック部分のコーディングは楽しいけど、テストとなると「また同じようなコードを書くのか」という気持ちになる人も多いでしょう。
そんな時、ClaudeのようなAIに頼んでみる。でも、ただ「テストクラス書いて」と言っても、期待した通りの結果は得られないことがほとんどです。今回は、Claudeにテストクラスを上手に書いてもらうための指示の出し方をシェアしたいと思います。
まずは元のクラスをしっかり伝える
Claudeにテストクラスを依頼するとき、一番重要なのは対象のApexクラス全体を共有することです。
// こんな感じで、元のクラスを全部貼り付ける
public class AccountService {
public static List<Account> getActiveAccounts() {
// 実装内容
}
}
「このクラスのテストを書いて」だけでは不十分。以下の情報も一緒に伝えましょう。
- そのクラスが何をするものなのか
- どんなパターンをテストしたいか
- カバレッジの目標(通常は75%以上)
例えば、「このAccountServiceクラスは、アクティブなアカウントを取得するためのユーティリティクラスです。正常系、異常系、境界値のテストケースを含めて、カバレッジ85%以上を目指したテストクラスを作成してください」といった具合です。
具体的なテストパターンを指示する
Claudeは優秀ですが、あなたのビジネスロジックの細かい要件まではわかりません。だからこそ、どんなパターンをテストしたいかを具体的に指示する必要があります。
正常系のテスト
- 通常のデータでの動作確認
- 期待する戻り値の検証
異常系のテスト
- null値の処理
- 例外発生時の動作
- 権限がない場合の処理
境界値テスト
- リストの最大件数
- 文字列の長さ制限
- 数値の上限・下限
「これらのパターンでテストケースを作成し、それぞれにアサーションを含めてください」と伝えると、Claudeもより具体的なテストコードを生成してくれます。
Salesforce特有の制約を伝える
SalesforceのApexテストには、独特の制約やベストプラクティスがあります。これらをClaudeに事前に伝えておくと、より実用的なテストクラスが出来上がります。
データ作成について
@TestSetup
static void setupTestData() {
// テストデータの作成
}
「@TestSetupアノテーションを使って、共通のテストデータ作成メソッドを含めてください」と指示しましょう。
システムコンテキストのテスト
「System.runAs()を使って、異なるユーザー権限でのテストも含めてください」と追加すると、権限周りのテストも考慮してくれます。
DMLの制限
「テストメソッド内では適切にTest.startTest()とTest.stopTest()を使い、ガバナー制限を意識したテストにしてください」と伝えることも大切です。
アサーションは具体的に指示する
テストで最も重要なのは、適切なアサーション(検証)です。Claudeには「System.assertEqualsやSystem.assertNotNullsを使って、戻り値だけでなくデータベースの状態変化も検証してください」と伝えましょう。
曖昧なアサーションではなく、以下のような具体的な検証を求めます。
- 戻り値の件数が期待通りか
- オブジェクトのフィールド値が正しく設定されているか
- 例外が期待通りにスローされるか
- データベースにレコードが正しく保存されているか
出力形式も指定する
「完全に動作するApexテストクラスとして、以下の形式で出力してください」と伝えると、Claudeも整理された形で回答してくれます。
- クラス名とアノテーション
- テストメソッドごとのコメント
- 必要なimport文
生成されたテストの確認ポイント
Claudeが生成したテストクラスを受け取ったら、以下を確認しましょう。
まず、実際にコンパイルできるかをSalesforce組織で確認してください。構文エラーがあることもあります。
次に、テストの実行結果を見て、想定通りのカバレッジが取れているかをチェック。足りない部分があれば、「〇〇行目のカバレッジが取れていないので、このパターンのテストを追加してください」とClaudeに再度依頼できます。
最後に、アサーション内容が適切かを確認。「本当にこの値が正しいのか」「もっと厳密に検証すべき項目はないか」を見直しましょう。
まとめ
ClaudeにApexテストクラスを書いてもらうコツは、詳細で具体的な指示を出すことです。元のクラス情報、テストパターン、Salesforce固有の制約、そして期待する出力形式を明確に伝える。これだけで、手作業で書くのと遜色ないテストクラスが手に入ります。
まずは小さなクラスから試してみてください。慣れてくると、複雑なビジネスロジックのテストクラスも効率的に作成できるようになりますよ。