qt-unittest-make

Use when users request generating unit tests for Qt modules or classes, completing test cases, or creating test files. Supports module batch generation and incremental completion.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "qt-unittest-make" with this command: npx skills add re2zero/deepin-skills/re2zero-deepin-skills-qt-unittest-make

Qt Unit Test Generator

Overview

Core principle: 使用 LSP 精确分析类结构,生成 100% 函数覆盖率的测试用例,并强制验证构建成功。

架构模式: Skill 路由 + 子 Agent 全栈执行。子 Agent 负责所有具体工作,Skill 仅负责调用和结果反馈。

关键特性: 智能 CMake 合并、增量更新支持、严格的构建验证、详细的错误处理。

Iron Laws

  1. 仅使用 Google Test: 测试框架固定为 GTest,不支持 Qt Test
  2. 100% 函数覆盖率: 每个 public/protected 函数必须至少一个测试用例
  3. 智能 CMake 合并: 根据项目实际情况优化合并,确保通用性
  4. 支持增量更新: 对比现有测试,补全未覆盖函数
  5. 必须验证构建: 生成后必须编译成功才能报告完成
  6. 编译失败必须修正: 每个错误最多重试 3 次,最大循环 10 次

When to Use

触发条件:

  • 用户请求为模块生成单元测试:为 src/lib/ui 模块创建单元测试
  • 用户请求为类生成测试:为 MyClass 生成测试
  • 用户请求补全测试:为 MyClass 补全测试

不使用此技能时:

  • 用户请求生成测试框架(使用 qt-unittest-build
  • 用户请求修复测试失败(使用 systematic-debugging
  • 用户请求分析测试覆盖率(使用其他工具)

执行流程

步骤 1: 检查测试框架

验证 autotests/CMakeLists.txtautotests/3rdparty/stub/ 存在。如不存在,提示用户先运行 qt-unittest-build

步骤 2: 分析类结构

模块批量生成: glob 扫描目录所有 .h/.hpp,提取类名。

单个类: 直接分析指定类。

使用 LSP 工具:

  • lsp_document_symbols - 提取类结构
  • lsp_goto_definition - 读取函数实现
  • lsp_find_references - 查找依赖

步骤 3: 调用子 Agent(MUST DO)

重要: 必须调用子 Agent,不能跳过!

子 Agent 位置: agent/unittest-generator.md

调用方式:

使用 task 工具调用子 Agent:

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

为什么需要子 Agent:

  • 独立上下文: 为单个类或小模块生成测试时,独立上下文避免污染
  • 并行执行: 为多个类批量生成测试时,可以 fork 多个子 Agent 并行执行,提高效率
  • 任务隔离: 子 Agent 失败不影响主 Agent,便于错误处理

调用时机:

  • 模块批量生成: 为每个类调用一个子 Agent(并行)
  • 单个类生成: 调用一个子 Agent
  • 增量更新: 调用子 Agent 分析差异

步骤 4: 等待子 Agent 完成

监听子 Agent 的执行结果:

  • 收集生成的测试文件
  • 检查验证构建结果
  • 记录遇到的错误(如果有)

步骤 5: 反馈用户

根据子 Agent 的结果反馈用户:

  • 如果成功:报告生成的测试文件和覆盖率
  • 如果失败:报告详细的错误信息和修正建议

Red Flags

  • ❌ 使用 Qt Test 框架
  • ❌ 覆盖率不足 100%
  • ❌ 硬编码 CMake 模板
  • ❌ 不验证构建
  • ❌ 不支持增量更新
  • ❌ 编译失败仍报告完成
  • ❌ 跳过子 Agent 调用(直接手动工作)

Quick Reference

测试文件命名: 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 次

子 Agent 调用

必须使用 task 工具调用子 Agent:

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

子 Agent 执行内容:

  • 分析项目结构(LSP)
  • 生成测试文件(100% 覆盖率)
  • 智能合并 CMake
  • 验证构建(每个错误重试 3 次,最大循环 10 次)

为什么需要子 Agent:

  • 独立上下文,防止污染
  • 并行执行,提高效率
  • 任务隔离,便于错误处理

常见错误

错误原因修复
测试框架不存在未运行 qt-unittest-build提示用户先运行框架构建技能
覆盖率不足未分析所有函数确保 lsp_document_symbols 提取完整
CMake 合并失败硬编码模板使用 AI 智能合并,根据项目实际情况优化
编译失败Stub 签名错误使用 LSP 获取精确签名
编译失败仍报告完成跳过验证或验证不严谨必须编译成功才能报告用户
多个错误未修正全局重试 3 次不足每个错误重试 3 次,最大循环 10 次

Rationalization Table

ExcuseReality
"直接手动工作更快"手动工作无法保证 100% 覆盖率和构建验证,子 Agent 是强制要求
"跳过子 Agent 调用"违反技能的铁律,必须调用子 Agent
"编译失败也可以报告完成"违反强制构建验证要求,必须编译成功才能报告
"全局重试 3 次就够了"每个错误重试 3 次,不是全局 3 次
"覆盖率 80% 就可以了"铁律要求 100% 函数覆盖率,无例外
"Qt Test 也一样"技能固定使用 Google Test,不支持 Qt Test

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

qt-compatibility-build

No summary provided by upstream source.

Repository SourceNeeds Review
General

qt-translation-assistant

No summary provided by upstream source.

Repository SourceNeeds Review
General

qt-unittest-build

No summary provided by upstream source.

Repository SourceNeeds Review
General

create-release-tags

No summary provided by upstream source.

Repository SourceNeeds Review