<!-- title: 测试件缺席：效率赛道最后真空 -->

# 测试件缺席：审查、调试、重构都拆完了，「写测试」这件事没人做

## 概述

## 一、三组口供：真空不是错觉

**装机端。** 本栏 09-04 期装机普查的口径是 390 件、人设件占三分之二；把剩下三分之一的工具件逐名扫过去，与「测」字沾边的只有三件：webapp-testing（官方 E2E 侦察件，已拆）、pptx-test（名字在册、无描述随清单，从名字看是 PPT 产物的质检件※）、encoding-check（环境件※）。数据科学侧最接近「修」的 notebook-fix 也只管修笔记本、不管写测试※。三件没有一件的靶子是「为你的业务代码编写用例」。

**出厂端。** 官方 16 件 example-skills 清单（r2-0618 存档抓取口径）里，唯一带 test 字样的是 webapp-testing。更妙的是措辞证据：出厂件 verify 的描述原文给了五个触发场景——"verify a PR / confirm a fix works / **test a change manually** / check a feature works / validate local changes before pushing"——第三个场景里，"test" 这个词的官方触发位给的是「手动测一测」，不是「写测试」。官方把「测试」一词消费在观察行为上，编写用例这件事，官方从未设件。

```mermaid
mindmap
  root((测试件真空<br/>三组口供))
    装机端
      390件在册
      测试写作件为零
      仅E2E与质检沾边
    市场端
      四期快照零上榜
      表达层一周6件
      可展示性筛选
    出厂端
      官方16件无一件
      verify占据test一词
      执行位划给hooks
```

## 二、评测对比表：测试轨道上的五个近邻件

口径：五维（功能 25% / 设计 25% / 实战 20% / 上手 15% / 社区 15%），满分 5。verify、gh-fix-ci、verification-before-completion、webapp-testing 为存档实测分或星级沿用；tdd 为本期黑箱估分※。最后一行是本期主角——那个不存在的件。

| 件 | 归属 | 它卡的测试段 | 功能 | 设计 | 实战 | 上手 | 社区 | 加权 |
|---|---|---|---|---|---|---|---|---|
| verify | 出厂件 | 观察层（跑起来看行为） | ★★★★ | ★★★★ | ★★★★★ | ★★★★ | ★★★★★ | **4.35**（沿用） |
| webapp-testing | 官方插件 | E2E 特例（仅网页） | ★★★★★ | ★★★★★ | ★★★★★ | ★★★★ | ★★★★ | **4.7**（星级换算） |
| verification-before-completion | superpowers | 纪律层（不许谎报完成） | ★★★★☆ | ★★★★★ | ★★★★ | ★★★★☆ | ★★★★★ | **4.6**（存档实测） |
| gh-fix-ci | 出厂件 | 下游层（红灯修绿） | ★★★★ | ★★★★ | ★★★★ | ★★★★ | ★★★ | **3.9**（实拆沿用） |
| tdd ※ | mattpocock/skills | 纪律层（红绿循环编排） | ★★★☆ | ★★★★☆ | ★★★☆ | ★★★ | ★★★★★ | **3.9※** |
| **编写层：写测试件** | **无人** | **编写用例** | — | — | — | — | — | **缺席** |

> 说明：tdd 的社区五星依据是套件级安装量（skills.sh 口径累计约 1820 万次，单源标注），并非 tdd 单件的独立数据；上手三星的依据是 mattpocock 系有「裸仓库装上跑不起来」的前科（triage 强依赖 /setup 写配置，存档已证），tdd 是否可独立可用未经核验。

## 三、逐件看：它们各自停在离「写测试」一步的地方

**verify——行为主义的终点。** 它的哲学是「通过运行应用、观察行为来验证」，五个触发场景全是验证动词，零产物产出。它隐含一个前提：要么已有人写了测试，要么人知道该怎么验。官方栈里它拿 4.35 的实拆高分，但它是测试的**消费者**，不是生产者。

**webapp-testing——唯一的真测试件，靶子却是网页。** 决策树侦察 + with_server.py 生命周期托管 + examples/ 抽屉，结构是官方范本级（r8-1228 给到 5/5/5/4/4）。但测的是「页面 behaves」，不是「函数 correct」。耐人寻味的是官方为什么单选 E2E：浏览器截图是可观测的证据——又一次「可展示性」筛选，与第三节的假设三呼应。

**verification-before-completion——最接近测试灵魂的一件，却一个测试都不写。** 它管的是「宣布完成之前必须验证过」的纪律，而它的反合理化表第一行堵的借口恰恰是「这次改动很小不用测了」。把这句话读两遍：生态里写得最好的测试相关文本，是一份**防跳过测试的借口反驳表**。纪律层齐了，编写层至今没人接盘。

**gh-fix-ci——测试的下游。** 红灯已经亮了，它负责修绿：inspect_pr_checks.py 处理 gh 字段漂移、非零退出码直通自动化（r5-1133 实拆口径，3.9 分）。它与 github-actions-skill「一个管写对、一个管修好」的分工存档早有记录。停点在于：它假设测试已经存在于流水线里——链路上游的「测试从哪来」，它不问。

**tdd（※黑箱）——全生态唯一幸存者。** 名字契约先读一层：把「测试驱动开发」这个四十年方法论压成三个字母，赌的是读者自带语境，不做任何解释性展开。从套件血统推断※：同一作者的 writing-great-skills 立过「checkable 且 exhaustive」表述法，grilling 原语、triage 状态机也在同一套件——tdd 大概率不是「教你 pytest」的知识件，而是纪律编排件：先写失败测试→看着它失败→再实现，每步有可检验判据。它卖流程不卖知识，恰好成了本文第四节论点的活注脚。

## 四、真空为什么存在：三个假设与一个幸存者

**假设一：知识冗余。** pytest 语法、断言库、mock 手法都在模型基线能力里，「教知识」的测试 Skill 没有增量，市场自然不生产。但反证同样硬：纪律半是模型最弱的一环——superpowers 的反合理化表第一行就是证据，「跳过测试」是模型的系统性行为倾向，不是偶发失误。

**假设二：知识本地化。** 测试规范是仓库私有约定——fixture 怎么搭、命名跟谁走、覆盖率阈值多少。写错约定的测试比没有测试更吵。这类知识的正确容器是仓库自己的 CLAUDE.md 与项目配置，不是全局 marketplace 件：一个全局测试件装进十个仓库，九个在制造噪声。官方栈的分咎佐证这一点——执行位划给了 hooks（update-config 描述原文："hooks configured in settings.json … the harness executes these, not Claude"），修红灯划给了 gh-fix-ci。**测试在官方体系里的存在形态是配置与下游件，唯独不是编写件。**

**假设三：成果不可展示。** 测试的成果是「没发生的 bug」，负向成果没有截图、没有 demo。0133 期已记录本周母题：新 Skill 集体卷表达层，因为视觉成品才能换星。榜单逻辑天然淘汰拿不出 demo 的品类——质检层横评（r4-0257）观察过同款现象：门禁件好用，但难上榜。

**幸存者即证词。** tdd 是唯一活下来的，而它活下来的方式恰好是绕开三个假设：不卖知识（过假设一）、纪律全局可迁移、不依赖仓库约定（过假设二）、以过程纪律而非成品截图立身（假设三的部分豁免）。这也解释了为什么幸存者只有一个而不是一打。

```mermaid
flowchart LR
    A[改代码] --> B["纪律层<br/>tdd※ · verification-before-completion"]
    B --> C["编写层<br/>⚠️ 无人设件"]
    C --> D["执行层<br/>hooks / CI 配置（非技能）"]
    D --> E["观察层<br/>verify · run"]
    D -->|红灯| F["下游层<br/>gh-fix-ci"]
    W["webapp-testing<br/>E2E特例：仅网页"] -.-> C
    W -.-> D
```

五段轨道里，唯獨编写层空着。需要一个免责声明：superpowers 14 件中存档仅点名 9 件，mattpocock 53 件的完整清单也未在本期材料中逐件核对——不排除某处藏着第二只测试件，这是本文论断的最大不确定点。

## 五、想填坑的人怎么写：三层握手协议

按本文三假设，编写层的正确形态不是「AI 帮你写测试」的知识件，而是**纪律件 + 钩子握手件**。三层可抄：

**触发层（description）。** TRIGGER 卡技术信号：「no tests for」「coverage」「regression」「补个用例」；SKIP 把近邻场景明确推出去——「跑测试归 hooks，修红灯归 gh-fix-ci」。这是 r3-0104 提炼的触发-跳过对与边界让渡模式的直接应用。

**正文层（纪律 checkable 化）。** 把红绿循环写成有证据的流水线：先写失败测试→运行→**粘贴失败输出作为证据**→最小实现→再运行→粘贴通过输出。配一条开篇算式（借 code-review 的写法）：每函数 ≤3 用例起步——正常路径/边界/异常，覆盖率只报数、不许诺。再预装一张反合理化表（superpowers 资产直接搬）。

**钩子层（与 harness 握手）。** SKILL.md 明写「本件只管写，执行归钩子」，并在文末给出交接配置（结构示意，以官方 hooks 文档为准）：

```json
{
  "hooks": {
    "PostToolUse": [{
      "matcher": "Edit|Write",
      "hooks": [{ "type": "command", "command": "pytest -x -q" }]
    }]
  }
}
```

改完即跑交给 harness，红灯善后交给 gh-fix-ci——一个编写件与官方栈的完整握手协议。

## 六、安装与使用

```bash
# tdd 所在套件（53 件；triage 类需先跑 /setup 写配置，tdd 是否独立可用未经核验※）
npx skills add mattpocock/skills

# verification-before-completion 所在框架（官方插件市场一条命令）
/plugin install superpowers@claude-plugins-official

# webapp-testing 所在官方合集
npx skills add anthropics/skills

# verify / gh-fix-ci 为出厂件，随 Claude Code 分发，无需安装
```

## 七、推荐排行榜与结论

- **测试轨道即战力**：webapp-testing（4.7）——今天就想测点什么的唯一选择
- **防跳过最锋利**：verification-before-completion（4.6）——一张反合理化表堵住模型的全部借口
- **官方哲学代表**：verify（4.35）——行为主义，不写断言写观察
- **下游最顺滑**：gh-fix-ci（3.9）——红灯修绿，退出码直通自动化
- **唯一幸存者**：tdd（3.9※）——纪律编排路线的孤本，等一次正文核验
- **最大空位**：编写层——但按三假设，别做知识版，做「纪律 + 钩子握手」版

测试真空不是生态的疏忽，是三次理性投票（知识冗余、知识本地化、成果不可展示）投出来的形状。对使用者，今天就能做的三件事：装 verification-before-completion 堵借口、用 hooks 把执行自动化、在仓库 CLAUDE.md 里写清本仓库测试约定——三件拼起来，就是一个不叫 Skill 的「写测试件」。对写技能的人，空位在编写层，但入场门票是纪律与握手，不是 pytest 知识。

## 参考来源

> [!tip] 51学通信知识星球
> **星主：爱卫生**（微信：gprshome201101）——公众号「51学通信」创办者，19 年通信行业运维与讲师经验，著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书（各大电商平台有售）。
> **星球定位**：深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域，主打运维岗位与信令分析。
> **当前规模**：5200 篇主题 / 990 个回答，198 元/年。
> **加入福利**：加入星球后请加爱卫生微信，拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题，另有群内分享。
> **AI 加持**：51学通信知识星球已作为 skill 接入 WorkBuddy，使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例，做总结、找文档和 PPT 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
