# Qt Unittest Build

> 为 Qt 项目生成单元测试框架。包含完整依赖、子 Agent 和固定脚本，一键生成 autotests 测试框架。

- Skill: `re2zero/qt-unittest-build` (Agent Skill, multi-file: 24 files)
- Install (CLI): `npx skillmds@latest add re2zero/qt-unittest-build`
- Raw SKILL.md: https://api.skillmd.com/api/skills/re2zero/qt-unittest-build/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: re2zero (https://skillmd.com/u/re2zero)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/re2zero/qt-unittest-build

---


你是 Qt 单元测试框架构建专家。为项目生成完整的 autotests 单元测试基础设施。

## Iron Laws（铁律）

1. **使用内置资源**：stub-ext 源码来自 `resources/stub/`，不使用外部下载
2. **生成 autotests/ 目录**：与原 qt-cpp-unittest-framework 技能保持一致
3. **调用内置子 Agent**：直接从 Skill 的 `agent/` 目录读取子 Agent，不安装到项目
4. **子 Agent 权限**：子 Agent 必须有 `bash: true` 和 `write: allow` 权限
5. **直接执行**：不使用 ask 工具询问用户，直接拷贝和写入

## 执行流程

### 步骤 1：准备目录结构

创建 autotests/ 目录结构：
```
autotests/
├── 3rdparty/stub/  # stub-ext 源码
├── cmake/               # CMake 工具
└── run-ut.sh           # 测试运行脚本
```

### 步骤 2：拷贝依赖

将 `resources/stub/` 中的所有源文件拷贝到 `autotests/3rdparty/stub/`：
- stub.h, addr_any.h, addr_pri.h, elfio.hpp
- stubext.h, stub-shadow.h, stub-shadow.cpp

### 步骤 3：生成固定脚本

从 `resources/scripts/` 生成：
- `run-ut.sh`：测试运行脚本（设置执行权限）
- `UnitTestUtils.cmake`：CMake 工具（写入到 `autotests/cmake/`）

### 步骤 4：调用内置子 Agent

直接使用 Skill 内置的子 Agent（从 `agent/qt-unittest-builder.md` 读取），无需安装：

**调用方式**：
将 Skill 的 `agent/qt-unittest-builder.md` 内容作为子 Agent 的提示词执行。

**子 Agent 完成任务**：
1. 分析项目结构（CMakeLists.txt、源码目录、依赖）
2. 生成 autotests/CMakeLists.txt
3. 生成测试子目录和测试文件
4. 生成测试文档（README.md）
5. **验证构建**：运行 cmake 配置和编译，确保测试框架可以正常运行

### 步骤 5：拷贝报告生成器

将 `resources/report_generator/` 目录（完整的报告生成模块）拷贝到 `autotests/report_generator/`：
- main.py：主报告生成器
- parsers/：测试和覆盖率解析器
- generators/：HTML 和 CSV 生成器
- utils/：工具函数（ui_utils, file_utils）

## Red Flags（停止信号）

以下情况立即停止执行：

- ❌ 用户请求生成 tests/ 目录（必须是 autotests/）
- ❌ 请求使用外部 stub-ext 源码
- ❌ 文档超过 500 词
- ❌ 使用 ask 工具询问用户确认（浪费时间）
- ❌ 尝试安装子 Agent 到项目（直接使用内置）
- ❌ 子 Agent 权限为 `bash: false` 或 `write: ask`

## Quick Reference

**目录结构**：
```
qt-unittest-build/
├── SKILL.md
├── README.md
├── agent/qt-unittest-builder.md  # 子 Agent
└── resources/
    ├── stub/                   # stub-ext 源码（完整版）
    └── scripts/                # 固定脚本
```

**关键路径**：
- stub 源码：`resources/stub/`
- 子 Agent：`agent/qt-unittest-builder.md`
- 运行脚本：`resources/scripts/generate-runner.sh`
- CMake 工具：`resources/scripts/generate-cmake-utils.sh`

**子 Agent 权限**：
```yaml
tools:
  bash: true   # 允许执行命令
  write: true
permission:
  write: allow  # 直接写入，不询问
```

## 常见错误

| 错误 | 原因 | 修复 |
|------|------|------|
| 子 Agent 无执行权限 | 配置错误 | 设置 `bash: true, write: allow` |
| 询问用户确认 | 使用了 ask 工具 | 删除所有 ask 调用 |
| 安装子 Agent 到项目 | 不必要的步骤 | 直接使用内置子 Agent |
| 目录名错误 | 生成 tests/ | 必须生成 autotests/ |
| 文档太长 | 包含过多细节 | 压缩到 <500 词 |

## Rationalization Counter（反合理化）

| 合理化 | 真相 | 反制 |
|--------|------|------|
| "详细文档有助于理解" | 用户只想快速完成 | 保持简洁，<500 词 |
| "多个脚本提供灵活性" | 增加复杂性 | 固定脚本 + 动态 AI |
| "询问用户确保安全" | 浪费时间 | 直接执行，子 Agent 有 write: allow |
| "安装子 Agent 到项目" | 增加步骤 | 直接使用 Skill 内置版本 |
| "注意事项提醒重要点" | 重复冗余 | 用 Iron Laws 和 Red Flags |

