ユニットテストAIガイド:ハルシネーション・ゼロ
AIはユニットテストにおいて失敗することがよくあります。メソッドを捏造したり、誤ったモック構造を作成したり、存在しないインポートを使用したりします。これは、AIに厳密なコンテキストが欠けているために起こります。
決定論的なシステムを使用することで、これを防ぐことができます。「推測」させるのではなく、「強制」するように移行しなければなりません。
以下に、5つの主要なスタックにおけるハルシネーション・ゼロのユニットテストの標準を示します。
技術スタックの標準
スタックごとに1つのライブラリを選択してください。混ぜてはいけません。
- Node.js (NestJS/Express): Jest
- React.js: Vitest + React Testing Library
- Python: pytest
- Angular: Jest
- Laravel: Pest
秘訣:プロジェクト単位のルール
標準的なプロンプトだけでは不十分です。IDEに直接ルールを注入する必要があります。Cursorを使用している場合は、.cursor/rules/ ディレクトリを使用してください。
各テクノロジーに対して、特定のルールファイルを作成します:
- unit-test-global.mdc: AAA (Arrange, Act, Assert) パターンを設定します。
- unit-test-nestjs.mdc: TestingModule と jest-mock-extended を強制します。
- unit-test-react.mdc: fireEvent ではなく user-event を使用することを義務付けます。
- unit-test-python.mdc: pytest-mock のパターンを標準化します。
- unit-test-laravel.mdc: Pest の構文と Mockery の使用を保証します。
これらのファイルは契約として機能します。AIはすべてのプロンプトの前にこれらを読み取ります。これにより、根本的な原因からハルシネーションを防ぐことができます。
ユニットテストの契約
すべてのテストは、以下の5つのルールに従わなければなりません:
- Isolation(隔離): すべての外部依存関係をモックにします。実際のDBやHTTPコールは行いません。
- Structure(構造): AAAを使用します。Arrange、Act、Assert の各ブロックには必ずコメントを付けてください。
- Naming(命名): 「should [behavior] when [condition]([条件]のとき[振る舞い]すべき)」という形式を使用します。「test 1」のような曖昧な名前は避けてください。
- Coverage(カバレッジ): ハッピーパス、null入力、エラーパス、およびエッジケースをテストします。
- Speed(速度): 各テストは100ms未満で実行される必要があります。
実装ステップ
- ライブラリと設定ファイルをセットアップします。
.cursor/rules/フォルダを作成します。- プロジェクトのルートに、永続的なメモリとして機能する
CLAUDE.mdファイルを追加します。 - CIパイプラインでカバレッジのしきい値を設定します(行カバレッジ80%を目指します)。
- pre-commit フックを使用して、テストされていないコードがリポジトリに入らないようにします。
AIにテストを書かせるのをやめましょう。AIにテストの書き方を指示し始めましょう。
Source: https://dev.to/bhaumik-viitor/unit-test-ai-guide-zero-hallucination-cross-stack-standard-4mb2
Optional learning community: https://t.me/GyaanSetuAi