qt-unittest-make について
Qt プロジェクトで Google Test のユニットテストを生成するスキルです。クラスやモジュールのテストを作成・拡充する開発者向けで、LSP による構造分析とビルド成功の確認を行います。
主な機能
- 01LSP によるクラス構造の分析
- 02Google Test ケースの生成
- 03public・protected 関数のカバー
- 04既存テストの段階的な拡充
- 05CMake の統合とビルド検証
活用シーン
- 01単一クラスのテスト作成
- 02モジュール単位のテスト生成
- 03既存テストの関数カバー漏れの補完
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ re2zero/ deepin-skills --skill qt-unittest-makeインストール後、Claude Code で/qt-unittest-makeを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdagent/unittest-generator.mdresources/templates/cmake_module.txtgoogle_test_base.cppstub_patterns.cpp詳細
Qt 単体テストジェネレーター
概要
基本原則:LSP を使用してクラス構造を正確に分析し、関数カバレッジ 100% のテストケースを生成し、ビルドの成功を必ず検証します。
アーキテクチャパターン:スキルによるルーティング+サブエージェントによる全工程の実行。すべての具体的な作業はサブエージェントが担当し、スキルは呼び出しと結果のフィードバックのみを担当します。
主な特長:CMake のスマートなマージ、増分更新のサポート、厳格なビルド検証、詳細なエラー処理。
絶対遵守事項
- Google Test のみを使用:テストフレームワークは GTest に固定し、Qt Test はサポートしません
- 関数カバレッジ 100%:すべての public/protected 関数に、少なくとも 1 つのテストケースが必要です
- CMake のスマートなマージ:プロジェクトの実情に応じて最適化し、汎用性を確保します
- 増分更新をサポート:既存のテストと比較し、カバーされていない関数を補完します
- ビルド検証を必ず実施:生成後、コンパイルに成功してから完了を報告する必要があります
- コンパイルエラーは必ず修正:各エラーの再試行は最大 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 はサポートしません |