用途
Unit Testing 技能用于为代码编写全面的单元测试,覆盖完整场景,包括 happy path、边界情况和错误条件。当被要求(1)为新代码或现有代码编写测试、(2)添加单元测试、(3)测试函数/模块/类时,可使用该技能。
核心原则
- 测试行为,而非实现:测试验证代码做什么,而不是如何做。
- 每个测试一个断言概念:每个测试验证单个逻辑行为。
- Arrange-Act-Assert 结构:准备、执行、验证。
- 描述性测试名称:名称描述场景和预期结果。
- 独立测试:没有测试依赖另一个测试的状态或执行顺序。
- 快速测试:除非是集成测试,否则模拟昂贵操作(网络、磁盘、数据库)。
工作流程
- 强制要求:编写测试前使用 context7
关键:在编写任何测试之前,使用 context7 查找当前测试框架文档和最佳实践。
始终使用 context7 验证:
- 测试框架 API(Jest、Vitest、pytest 等)
- 断言语法和可用 matcher
- 模拟/打桩模式
- 测试库工具(React Testing Library 等)
- 框架特定最佳实践
流程:
- 识别正在使用的测试框架和库
- 对每个框架使用 context7 resolve <framework>
- 查询相关主题:断言、模拟、异步测试等
- 编写测试代码前查看文档
示例: context7 resolve vitest context7 get-library-docs --library vitest --topic "mocking" context7 resolve @testing-library/react context7 get-library-docs --library @testing-library/react --topic "async"
工作流步骤:
- 使用 context7 获取测试框架文档:查找当前 API 和模式
- 分析代码:识别公共接口、依赖、边界情况、错误条件
- 确定测试范围:函数/类使用单元测试,交互使用集成测试
- 检查现有结构:遵循项目现有测试组织模式
- 选择合适的框架:见下文语言特定参考
- 编写覆盖以下内容的全面测试:
- Happy path(预期输入产生预期输出)
- 边界情况(空输入、边界值、null/None 值)
- 错误条件(无效输入、异常、失败模式)
- 状态变化(副作用、变更)
按语言/框架使用 context7
在编写测试之前,使用 context7 查找以下文档:
| 语言/框架 | 要查询的 context7 库 |
|---|---|
| JavaScript/React | react、vitest 或 jest、@testing-library/react |
| Python | pytest、被测相关库 |
| R | testthat、tidyverse |
| Rust | rust(内置测试) |
| Go | go(testing 包) |
| C++ | googletest 或 gtest |
| Node.js/Express | express、supertest、jest |
常见查询主题:
- "mocking"、"assertions"、"async testing"、"setup teardown"
- "matchers"、"fixtures"、"test coverage"、"integration tests"
语言参考
根据被测代码选择适当参考:
| 语言/工具 | 参考 | 框架 |
|---|---|---|
| Python | python.md | pytest |
| JavaScript | javascript.md | Jest / Vitest |
| R | r.md | testthat |
| Rust | rust.md | 内置 #[test] |
| Go | go.md | testing + testify |
| C++ | cpp.md | Google Test |
| SQL (PostgreSQL) | sql.md | pgTAP |
| Bash | bash.md | bats-core |
| Ansible | ansible.md | Molecule + ansible-lint |
| Kubernetes/Kustomize | kubernetes.md | kubeconform + conftest |
| Docker | docker.md | hadolint + container-structure-test |
测试组织
遵循每种语言的约定。当项目已有测试时,匹配其结构。
模拟策略
根据上下文模拟外部依赖:
- 始终模拟:网络调用、外部 API、系统时间
- 考虑模拟:数据库(根据测试类型使用测试数据库或模拟)、文件系统
- 很少模拟:纯函数、数据转换
覆盖率目标
力求全面覆盖:
- 所有公共函数/方法
- 所有代码分支(if/else、match arms、错误处理器)
- 边界条件
- 错误处理路径
提醒:始终使用 context7
在编写任何测试代码之前:
- 使用 context7 查找测试框架的当前 API
- 验证断言语法和可用 matcher
- 检查模拟/打桩最佳实践
- 如需要,查看异步测试模式
切勿仅凭记忆编写测试——始终使用 context7 通过当前文档进行验证。
限制
该技能主要面向测试编写流程与规范,具体框架版本、安装方式、收费与价格信息暂未提供。