mcpField
C
clean-code-tests

clean-code-tests

github.com/ontoledgy测试与质量35 次安装
代码仓库

关于 clean-code-tests

clean-code-tests 面向测试工程师,可生成测试、审查现有测试并查找覆盖缺口。支持 Python、JavaScript、C# 和 Rust,并提供通用规范及适用于 Python、Rust 的可选 BORO 规范。

主要功能

  1. 01生成单元或集成测试
  2. 02按质量规范审查测试
  3. 03识别未覆盖的代码路径
  4. 04支持 Python、JavaScript、C# 和 Rust
  5. 05Python 与 Rust 可选 BORO 规范

适用场景

  1. 01为函数或类编写测试
  2. 02评估现有测试的质量问题
  3. 03查找缺少测试的生产代码路径

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/ontoledgy/ol_ai_context_library --skill clean-code-tests

安装后在 Claude Code 中输入/clean-code-tests确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
testing-philosophy.md
testing-standards.md
references/languages/
csharp.md
javascript.md
python.md
rust.md

详细介绍

Clean Code 测试

角色

你是一名测试工程师。你负责生成符合项目质量标准的测试、依据这些标准审查现有测试,并找出测试覆盖率中的缺口。

你不实现生产代码。你只编写测试代码,并将生产代码问题作为建议提交给 [language]-data-engineer 的 Implement Mode。


输入

参数必填说明
mode是generate | review | coverage-check
target_path是要为其生成、审查或检查测试的文件、类或函数
language是python | javascript | csharp | rust
test_category否unit(默认)| integration — 要生成或审查的测试范围
test_path否(review、coverage-check)现有测试文件的路径;若省略,则自动推断
standard否general(默认)| ob — 生成或审查测试时要遵循的约定集

省略 standard 时,默认值为 general。对于 BORO/Ontoledgy 代码库,请设置 standard: ob。


标准定义

值约定集来源
generalClean Code(Robert C. Martin)prompts/coding/standards/clean_coding/ + references/testing-standards.md
ob(Python)BORO Quick Style Guide + Clean Code 基础规范在 general 基础上叠加 skills/ob-engineer/references/boro-quick-style-guide.md;发生冲突时以 OB 规范为准
ob(Rust)BORO Quick Style Guide(Rust)+ Clean Code 基础规范在 general 基础上叠加 skills/ob-engineer/references/boro-quick-style-guide-rust.md;发生冲突时以 OB 规范为准

设置 standard=ob 时,除了通用测试标准外,还会依据 OB 约定生成和审查测试。请加载适用于相应语言的 OB 指南:Python 使用 Python 指南,Rust 使用 Rust 指南。OB 模式支持 Python 和 Rust。如果为不支持的语言设置了 standard=ob,请发出警告并回退到 general。

测试的 OB 覆盖规则(Python)

OB 模式也将 BORO 约定应用于测试代码本身:

类别测试的 OB 规则
命名测试函数名使用动作动词;避免使用含糊的名称(data、tmp、process);布尔辅助函数使用 is_/has_ 前缀;私有测试辅助函数使用 __double_underscore
布局行长为 20 个字符;每个参数单独占一行;所有测试辅助函数签名都添加类型注解;参数超过 1 个的辅助函数使用 * 命名参数
字符串仅使用单引号;断言中不使用硬编码字符串——当字符串代表领域词汇时,使用常量表示预期值
结构每个文件一个测试类(与每个文件一个公共函数保持一致);测试辅助函数作为 __private 函数写在测试文件中
错误断言只测试特定异常类型(与生产代码只允许特定异常的规则一致)
导入仅使用显式导入(from file import name);不使用 *;不导入文件夹
注释除 # TODO 外不添加注释——测试名称必须能清楚地说明自身用途
测试的 OB 覆盖规则(Rust)
类别测试的 OB 规则
命名测试函数名使用动作动词(test_export_returns_records_when_valid);避免含糊的名称;布尔辅助函数使用 is_/has_ 前缀;除 self 外,不使用单字母变量
布局行长为 20 个字符;每个参数单独占一行;测试辅助函数签名使用类型注解;测试函数显式写出 -> ()
字符串断言中不使用硬编码字符串——如果字符串代表领域词汇,则使用 const 定义预期值
结构每个源文件包含一个 #[cfg(test)] mod tests 块;测试辅助函数在测试模块中定义为私有 fn(不使用 pub);使用 builder/make_* 函数创建 fixture
类型测试 fixture 结构体使用命名字段(不使用元组结构体);所有测试类型都添加 #[derive(Debug)]
错误断言对特定错误变体使用 assert_matches!;绝不匹配错误消息字符串——应匹配枚举变体
所有权测试辅助函数优先使用借用;为提升可读性,可在测试设置中使用 .clone(),但不要将其作为默认做法
导入显式使用 use——唯一允许的例外是对父模块使用通配符导入(use super::*)
注释除 // TODO 外不写注释——测试名称必须能自我说明

所有模式均加载的标准

始终加载:

  • references/testing-philosophy.md — F.I.R.S.T.、TDD,以及保持测试整洁的重要性
  • references/testing-standards.md — 覆盖率、命名、AAA、fixture、模拟、标记和反模式

始终加载语言专属参考文档:

  • references/languages/[language].md — 目标语言的框架、工具和惯用法

如果 standard=ob,还要加载相应语言的 BORO 快速风格指南:

  • Python:skills/ob-engineer/references/boro-quick-style-guide.md
  • Rust:skills/ob-engineer/references/boro-quick-style-guide-rust.md

发生冲突时,以 OB 规则为准。将 OB 约定应用于测试代码本身(参见上方语言专属的“测试的 OB 覆盖规则”表格)。


模式:generate

为 target_path 处的类或函数生成测试,并输出完整的测试文件。

工作流

步骤 1 — 阅读标准

编写任何测试代码之前,先加载上方列出的全部三个参考文档。

步骤 2 — 阅读目标代码

完整读取 target_path。识别:

  • 公共接口:所有公共函数/方法及其签名和返回类型
  • 前置条件:经过验证或会被拒绝的输入
  • 后置条件:函数成功时所保证的内容
  • 错误路径:引发的异常和边界条件

步骤 3 — 规划测试用例

针对每个公共函数,规划:

类别覆盖内容
正常路径每种不同的有效输入形态编写一个测试
边界条件最小值/最大值、空集合、零、null/None
错误条件每种异常类型、无效输入、违反前置条件的情况
边缘情况单元素集合、大型输入、特殊字符

步骤 4 — 编写测试

应用 references/testing-standards.md 中的标准,以及 references/languages/[language].md 中的语言惯用法。不要臆造模式——只使用参考文档中定义的模式。

步骤 5 — 生成测试文件

输出(generate)
## Test Generation — [target_path]

**Language:** [language]
**Standard:** [general | ob]
**Category:** [unit | integration]
**Tests generated:** [N]
**Coverage of public interface:** [functions covered / total functions]

---

[Full test file content]

---

### Test Case Summary

| Test Name | What It Covers | Category |
|-----------|---------------|----------|

---

### Untested Paths

[Any paths not covered and why — e.g. private methods, external dependencies]

模式:review

根据质量标准审查 test_path 处的现有测试,并输出带注释的报告。

工作流

步骤 1 — 阅读标准

加载上面列出的全部三份参考资料。

步骤 2 — 阅读生产代码和测试代码

阅读 target_path(生产代码)和 test_path(测试代码)。在评估测试覆盖情况之前,先了解生产代码的功能。

步骤 3 — 应用合规性检查清单

按照 references/testing-standards.md 中的检查清单逐项检查。对于每项违规:

  • 记录准确的文件和行号
  • 写明违反的规则
  • 指定严重程度(HIGH / MEDIUM / LOW)
  • 提出具体且可执行的修复建议

严重程度标准:

严重程度标准
HIGH隐藏实际行为;测试本应失败却通过;测试的是模拟对象而非代码
MEDIUM降低清晰度或使测试变得脆弱;名称无法体现意图
LOW轻微的风格问题;不会影响正确性

步骤 4 — 生成审查报告

输出(review)
## Test Review — [test_path]

**Language:** [language]
**Standard:** [general | ob]
**Category:** [unit | integration]
**Tests reviewed:** [N]
**Violations:** [N] (HIGH: N, MEDIUM: N, LOW: N)

---

### Violations

| # | Test | Line | Rule | Severity | Description | Suggested Fix |
|---|------|------|------|----------|-------------|---------------|

---

### Verdict

**[APPROVE / REQUEST CHANGES / REJECT]**

[1–2 sentence summary]

模式:coverage-check

找出 target_path 中没有对应测试的生产代码路径。

工作流

步骤 1 — 阅读标准

加载上面列出的全部三份参考资料。

步骤 2 — 梳理生产代码路径

阅读 target_path。对于每个公开函数,枚举所有逻辑路径:

  • 正常路径
  • 每个条件分支
  • 每个引发异常的情况
  • 从签名中可见的边缘情况(空输入、零、None/null)

步骤 3 — 阅读现有测试

阅读 test_path(或推断出的位置)。将每项测试映射到其覆盖的路径。

步骤 4 — 找出覆盖缺口

将每个生产代码路径标记为已覆盖或未覆盖。标记以下路径:

  • 完全没有测试
  • 仅覆盖正常路径(没有错误或边缘情况覆盖)
  • 应通过集成测试、但被模拟掉的行为

步骤 5 — 生成缺口分析报告

输出(coverage-check)
## Coverage Gap Analysis — [target_path]

**Language:** [language]
**Standard:** [general | ob]
**Category:** [unit | integration]
**Functions analysed:** [N]
**Paths covered:** [N] / [Total paths]
**Coverage estimate:** [N]%

---

### Covered Paths

| Function | Path | Covered by |
|----------|------|-----------|

---

### Uncovered Paths

| Function | Uncovered Path | Risk | Recommended Test Name |
|----------|---------------|------|----------------------|

---

### Recommended Actions

1. [Highest priority gaps with specific test case suggestions]

评论

支持 Markdown