ユニットテスト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未満で実行される必要があります。

実装ステップ

  1. ライブラリと設定ファイルをセットアップします。
  2. .cursor/rules/ フォルダを作成します。
  3. プロジェクトのルートに、永続的なメモリとして機能する CLAUDE.md ファイルを追加します。
  4. CIパイプラインでカバレッジのしきい値を設定します(行カバレッジ80%を目指します)。
  5. 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