mcpField
Q
qt-unittest-make

qt-unittest-make

github.com/re2zeroテスト・品質762 回インストール12 週間前に更新
リポジトリ

qt-unittest-make について

Qt プロジェクトで Google Test のユニットテストを生成するスキルです。クラスやモジュールのテストを作成・拡充する開発者向けで、LSP による構造分析とビルド成功の確認を行います。

主な機能

  1. 01LSP によるクラス構造の分析
  2. 02Google Test ケースの生成
  3. 03public・protected 関数のカバー
  4. 04既存テストの段階的な拡充
  5. 05CMake の統合とビルド検証

活用シーン

  1. 01単一クラスのテスト作成
  2. 02モジュール単位のテスト生成
  3. 03既存テストの関数カバー漏れの補完

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/re2zero/deepin-skills --skill qt-unittest-make

インストール後、Claude Code で/qt-unittest-makeを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

README.md
agent/
unittest-generator.md
resources/templates/
cmake_module.txt
google_test_base.cpp
stub_patterns.cpp

詳細

Qt 単体テストジェネレーター

概要

基本原則:LSP を使用してクラス構造を正確に分析し、関数カバレッジ 100% のテストケースを生成し、ビルドの成功を必ず検証します。

アーキテクチャパターン:スキルによるルーティング+サブエージェントによる全工程の実行。すべての具体的な作業はサブエージェントが担当し、スキルは呼び出しと結果のフィードバックのみを担当します。

主な特長:CMake のスマートなマージ、増分更新のサポート、厳格なビルド検証、詳細なエラー処理。

絶対遵守事項

  1. Google Test のみを使用:テストフレームワークは GTest に固定し、Qt Test はサポートしません
  2. 関数カバレッジ 100%:すべての public/protected 関数に、少なくとも 1 つのテストケースが必要です
  3. CMake のスマートなマージ:プロジェクトの実情に応じて最適化し、汎用性を確保します
  4. 増分更新をサポート:既存のテストと比較し、カバーされていない関数を補完します
  5. ビルド検証を必ず実施:生成後、コンパイルに成功してから完了を報告する必要があります
  6. コンパイルエラーは必ず修正:各エラーの再試行は最大 3 回、ループは最大 10 回です

使用する状況

実行条件:

  • ユーザーがモジュールの単体テスト生成を依頼した場合:src/lib/ui モジュールの単体テストを作成して
  • ユーザーがクラスのテスト生成を依頼した場合:MyClass のテストを生成して
  • ユーザーがテストの補完を依頼した場合:MyClass のテストを補完して

このスキルを使用しない状況:

  • ユーザーがテストフレームワークの生成を依頼した場合(qt-unittest-build を使用)
  • ユーザーがテスト失敗の修正を依頼した場合(systematic-debugging を使用)
  • ユーザーがテストカバレッジの分析を依頼した場合(他のツールを使用)

実行フロー

ステップ 1:テストフレームワークの確認

autotests/CMakeLists.txt と autotests/3rdparty/stub/ が存在することを確認します。存在しない場合は、先に qt-unittest-build を実行するようユーザーに案内します。

ステップ 2:クラス構造の分析

モジュールの一括生成:glob でディレクトリ内のすべての .h/.hpp をスキャンし、クラス名を抽出します。

単一クラス:指定されたクラスを直接分析します。

LSP ツールを使用します:

  • lsp_document_symbols - クラス構造を抽出
  • lsp_goto_definition - 関数の実装を読み取る
  • lsp_find_references - 依存関係を検索
ステップ 3:サブエージェントの呼び出し(必須)

重要:サブエージェントを必ず呼び出してください。省略してはいけません!

サブエージェントの場所:agent/unittest-generator.md

呼び出し方法:

task ツールを使用してサブエージェントを呼び出します:

task(
    description="生成单元测试代码",
    prompt="完整的任务说明,包括:
- 目标模块或类
- 测试框架要求(Google Test)
- 函数覆盖率要求(100%)
- 验证构建要求",
    subagent_type="general"
)

サブエージェントが必要な理由:

  • 独立したコンテキスト:単一のクラスや小規模なモジュールのテストを生成する際、独立したコンテキストによって汚染を防ぎます
  • 並列実行:複数のクラスのテストを一括生成する際、複数のサブエージェントをフォークして並列実行できるため、効率が向上します
  • タスクの分離:サブエージェントの失敗がメインエージェントに影響しないため、エラー処理が容易になります

呼び出すタイミング:

  • モジュールの一括生成:クラスごとにサブエージェントを 1 つ呼び出します(並列実行)
  • 単一クラスの生成:サブエージェントを 1 つ呼び出します
  • 増分更新:サブエージェントを呼び出して差分を分析します
ステップ 4:サブエージェントの完了を待つ

サブエージェントの実行結果を監視します:

  • 生成されたテストファイルを収集
  • ビルド検証の結果を確認
  • 発生したエラーを記録(ある場合)
ステップ 5:ユーザーにフィードバックする

サブエージェントの結果に応じて、ユーザーにフィードバックします:

  • 成功した場合:生成されたテストファイルとカバレッジを報告
  • 失敗した場合:詳細なエラー情報と修正案を報告

注意すべき兆候

  • ❌ Qt Test フレームワークを使用する
  • ❌ カバレッジが 100% 未満である
  • ❌ CMake テンプレートをハードコードする
  • ❌ ビルドを検証しない
  • ❌ 増分更新をサポートしない
  • ❌ コンパイルに失敗したまま完了を報告する
  • ❌ サブエージェントの呼び出しを省略する(直接手作業で進める)

クイックリファレンス

テストファイル名:test_myclass.cpp

テストクラス名:MyClassTest

テストケース名:{Feature}_{Scenario}_{ExpectedResult}

LSP ツール:lsp_document_symbols, lsp_goto_definition, lsp_find_references

Stub パターン:&Class::method, VADDR(Class, method), static_cast<...>

コンパイル再試行ロジック:各エラーの再試行は最大 3 回、ループは最大 10 回です

サブエージェントの呼び出し

task ツールを使用してサブエージェントを必ず呼び出します:

task(
    description="生成单元测试代码",
    prompt="完整任务描述,包括目标、要求、验证流程",
    subagent_type="general"
)

サブエージェントの実行内容:

  • プロジェクト構造を分析(LSP)
  • テストファイルを生成(カバレッジ 100%)
  • CMake をスマートにマージ
  • ビルドを検証(各エラーを 3 回再試行、ループは最大 10 回)

サブエージェントが必要な理由:

  • コンテキストを独立させ、汚染を防止
  • 並列実行により効率を向上
  • タスクを分離し、エラー処理を容易にする

よくあるエラー

エラー原因修正
テストフレームワークが存在しないqt-unittest-build を実行していない先にフレームワーク構築スキルを実行するようユーザーに案内
カバレッジ不足すべての関数を分析していないlsp_document_symbols ですべての関数を確実に抽出
CMake のマージに失敗テンプレートをハードコードしているAI によるスマートなマージを使用し、プロジェクトの実情に応じて最適化
コンパイルに失敗Stub のシグネチャが正しくないLSP を使用して正確なシグネチャを取得
コンパイルに失敗したまま完了を報告検証を省略している、または検証が不十分ユーザーへの報告前に、必ずコンパイルに成功させる
複数のエラーが修正されない全体で 3 回の再試行では不十分各エラーを 3 回再試行し、ループは最大 10 回

正当化の言い訳一覧

言い訳実際のところ
「直接手作業で進めたほうが速い」手作業ではカバレッジ 100% とビルド検証を保証できません。サブエージェントの使用は必須です
「サブエージェントの呼び出しを省略する」スキルの絶対遵守事項に違反しています。サブエージェントを必ず呼び出す必要があります
「コンパイルに失敗しても完了を報告できる」必須のビルド検証要件に違反しています。報告前にコンパイルに成功させる必要があります
「全体で 3 回再試行すれば十分」各エラーを 3 回再試行します。全体で 3 回ではありません
「カバレッジ 80% で十分」絶対遵守事項では関数カバレッジ 100% が求められます。例外はありません
「Qt Test でも同じ」このスキルで使用するのは Google Test に固定されています。Qt Test はサポートしません

コメント