SuperAPI AI 工具集

unit-testing

测试与质量

查看项目

更新于 10-16 09:06

技能介绍

用途

Unit Testing 技能用于为代码编写全面的单元测试,覆盖完整场景,包括 happy path、边界情况和错误条件。当被要求(1)为新代码或现有代码编写测试、(2)添加单元测试、(3)测试函数/模块/类时,可使用该技能。

核心原则

  • 测试行为,而非实现:测试验证代码做什么,而不是如何做。
  • 每个测试一个断言概念:每个测试验证单个逻辑行为。
  • Arrange-Act-Assert 结构:准备、执行、验证。
  • 描述性测试名称:名称描述场景和预期结果。
  • 独立测试:没有测试依赖另一个测试的状态或执行顺序。
  • 快速测试:除非是集成测试,否则模拟昂贵操作(网络、磁盘、数据库)。

工作流程

  1. 强制要求:编写测试前使用 context7

关键:在编写任何测试之前,使用 context7 查找当前测试框架文档和最佳实践。

始终使用 context7 验证:

  • 测试框架 API(Jest、Vitest、pytest 等)
  • 断言语法和可用 matcher
  • 模拟/打桩模式
  • 测试库工具(React Testing Library 等)
  • 框架特定最佳实践

流程:

  1. 识别正在使用的测试框架和库
  2. 对每个框架使用 context7 resolve <framework>
  3. 查询相关主题:断言、模拟、异步测试等
  4. 编写测试代码前查看文档

示例: 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"

工作流步骤:

  1. 使用 context7 获取测试框架文档:查找当前 API 和模式
  2. 分析代码:识别公共接口、依赖、边界情况、错误条件
  3. 确定测试范围:函数/类使用单元测试,交互使用集成测试
  4. 检查现有结构:遵循项目现有测试组织模式
  5. 选择合适的框架:见下文语言特定参考
  6. 编写覆盖以下内容的全面测试:
    • 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 通过当前文档进行验证。

限制

该技能主要面向测试编写流程与规范,具体框架版本、安装方式、收费与价格信息暂未提供。