---
id: ka-guidance-测试优先编码
kind: guidance
title: 测试优先编码
sync_policy: engine_only
status: active
triggers:
  - 测试
  - TDD
  - 覆盖率
  - 单元测试
  - 先写测试
  - 测试优先
  - test first
  - 测试驱动
  - 写测试
extra:
  name: test-first-coding
  scope:
    - '*'
  products:
    - '*'
  category: procedure
  version: 1.0.0
  last_reviewed: '2026-06-17'
  verification_layer: L2
  stage: build
  domain: build
  owner_mechanism: mc-coding-readiness
---

# 测试优先编码：怎么让代码可验证

> 吸收旧的「测试优先编码」「覆盖率标准」「测试质量」。
> [[工程执行总纲]] 目标驱动：先定可验证目标，未执行验证不算完成。

## 何时必须先写测试

- 有测试框架且行为可断言时，先写失败测试（red）再实现（green）
- 修 bug 时先写复现测试（回归测试）

## TDD 循环

red（失败测试）→ green（最小实现通过）→ refactor（重构保持绿）

- 每一步都可验证，不积累"最后再测"
- 测试描述行为，不测实现细节（实现变了测试不该挂）

## 覆盖策略

- 覆盖率阈值来自项目配置、团队质量契约或风险决定；没有来源时不虚构统一百分比
- 覆盖率是下限不是目标——覆盖关键路径比追数字重要
- 重点覆盖：正常路径 / 错误路径 / 边界 / 权限 / 并发
- 验收点追溯：在测试计划和测试报告中记录 REQ-* ↔ 测试用例/命令/结果的真实对应；不为 SoloForge 强制向用户代码添加任务编号注释

## 测试质量（禁止伪满足）

- 禁止"测试自己证明自己"（断言恒真、mock 掉被测逻辑）
- 禁止为过门禁删断言/加无关 mock/降低覆盖率（[[工程执行总纲]] 精准修改硬失败）
- 测试要有意义：能抓到真实回归

## 不适用场景

- 纯 UI 布局/配置/无行为逻辑的代码：标注 `not_applicable_with_reason`，不强行写无意义测试

## 验证

- 当前切片要求执行的测试均有真实结果；失败、跳过和未运行保持原状态
- 配置了覆盖率阈值时达到阈值，未配置时报告实际值而不自定目标
- 关键路径有能捕获回归的断言，不是空壳测试
