テストコード標準
プロジェクトにおけるテストコードの標準や規約をAIに伝えておくことは、品質の高いテストコードを効率的に作成するために必要です。 AIにテストコードの標準をインプットすることで、プロジェクトのルールに沿った一貫性のあるテストコードを生成されることが期待できます。
以下は、テストコード標準に関するインストラクションファイルの記述例です。
---
applyTo: "**"
---
# テストコード標準
このプロジェクトにおけるテストコードの標準を定義します。
## テスト全般に関するルール
- テストメソッドはテスト仕様書をもとにして、テストケースごとに作成してください
- テストメソッド名は、テストの目的がわかる名称としてください
- テストメソッドにはJavadocを記述し、テストする内容と期待する結果がわかるようにしてください
- `given`、`when`、`then`の構造をコメントで記述し、テストの意図を明確にしてください
## テストデータに関するルール
- テストデータの準備にはDatabase Riderを使用します
- `@DataSet`アノテーションを使用して、テストメソッドごとに必要なデータを準備してください
- テストデータは`src/test/resources/datasets/[テストクラス名]`配下にYAML形式で配置してください
- テスト実行後の状態を検証する場合は`@ExpectedDataSet`を使用してください
- テストデータは`src/test/resources/datasets/[テストクラス名]/expected`配下にYAML形式で配置してください
## アサーションに関するルール
- テストコード内でのアサーションにはAssertJを使用します
- 複数のプロパティを検証する場合は`extracting`や`satisfies`を活用してください
## ステレオタイプごとのテスト方針
[クラスのステレオタイプとパッケージ構成](../stereotype.instructions.md)で定義した各クラスの責務にもとづき、以下の観点でテストを実装してください。
### Controller
- `@SpringBootTest`アノテーションと、MockMvcを使用してテストを実装します
- リクエストのバリデーションが正しく機能することを確認します。
- Serviceをモック化し、Controllerが正しくServiceを呼び出すことを確認します。
- レスポンスのHTTPステータスコードやボディが期待通りであることを検証します
### Service
- `@SpringBootTest`アノテーションを使用してテストを実装します
- 他のServiceやMapperはモック化せず、実際のクラスを使用します
- MapperのテストはService経由で行います
- テスト内容に応じて、Database Riderを使用したテストデータのセットアップおよびアサーションを行います
- ビジネスロジックが正しく実装されていることを、様々なパターンでテストします
- データベースアクセスを伴うバリデーション(相関チェックなど)が正しく機能することを確認します
- 楽観的排他制御が正しく機能することを確認します
### Mapper
- Mapper単体ではテストを実装しません
- Serviceのテストに含めるものとします
このようなインス トラクションファイルを、.github/instructions/test-code-standards.instructions.md
のようなファイル名で作成します。これにより、GitHub Copilotはプロジェクトのテスト規約を理解し、品質の高いテストコードの生成をサポートしてくれるようになります。
テストコード例はインストラクションファイルに含めない
本ページを読むと、各ステレオタイプのテストコード例までインストラクションファイルに含めた方がよいのではないか、と考えるでしょう。
テストコード例自体はAIが生成するコードの精度向上には必要ですが、内容が長大になりやすくコンテキストウィンドウを圧迫します。
1回の指示で生成するテストに関わるテストコード例を、プロンプトに含めるのがよいでしょう。
つまり、テストコード例は指示内容に応じたプロンプトファイルへ含めることをお勧めします。