SuperAPI AI 工具集

testing-strategies

测试与质量

查看项目

更新于 10-16 05:29

技能介绍

用途

Testing Strategies 是一套用于构建有效、可维护测试套件的完整框架,目标是让开发者对发布代码有信心。它适用于以下场景:为新项目搭建测试体系、改进现有测试覆盖率、实践测试驱动开发(TDD)、调试不稳定的测试(flaky tests)、决定哪些内容需要测试(以及哪些不需要)、组织测试文件与结构。

核心测试原则

  • 测试行为,而非实现:测试代码做什么,而不是怎么做;测试应能在重构后继续存活;聚焦公共接口。
  • 测试金字塔:单元测试(多、快、隔离)→ 集成测试(适量、中等速度)→ E2E 测试(少、慢、全面)。
  • 编写能提供有用失败信息的测试:清晰的错误消息、精确定位失败位置、展示期望值与实际值。

主要能力

1. 选择正确的测试层级

单元测试(约占 70%):适用于业务逻辑、数据转换、验证规则、纯函数、边界情况。特征为快速(每个 <100ms)、隔离(无外部依赖)、数量多、每次提交运行。

集成测试(约占 20%):适用于 API 端点、数据库操作、外部服务集成、多组件协作。特征为中等速度(每个 100ms-1s)、使用真实依赖(测试数据库、API)、数量少于单元测试、合并前运行。

E2E 测试(约占 10%):适用于关键用户旅程、完整工作流、跨浏览器兼容性。特征为慢(每个数秒)、完整应用栈、数量最少、发布前运行。

2. 编写单元测试(AAA 模式)

采用 Arrange-Act-Assert 结构:先准备测试数据与依赖,再执行被测代码,最后验证结果。示例中展示了使用 mock 仓库测试 UserService.createUser 的成功与验证失败场景。

应测试:业务逻辑、数据转换、验证规则、边界情况(null、空、最大值)、错误条件、纯函数。

不应测试:第三方库、简单 getter/setter、框架代码、配置、琐碎代码。

Mock 指南:Mock 外部依赖(如邮件服务、数据库),使用依赖注入;避免 Mock 内部实现细节,以免测试与实现耦合。

3. 编写集成测试

以 API 集成测试为例,展示了对 POST /api/users 的测试:使用测试数据库,在 beforeAll/afterAll 中创建和关闭,beforeEach 清空数据;验证成功创建返回 201、无效数据返回 400、重复邮箱返回 409,并检查数据库中确实存在记录。

4. 编写 E2E 测试(页面对象模式)

使用 Page Object 封装页面操作(如 LoginPage 的 navigate、login、getErrorMessage),测试中调用页面对象并断言 URL 或错误信息。

E2E 最佳实践:使用 data-testid 属性;测试用户旅程而非单个功能;在真实环境运行;正确处理异步;清理测试数据。避免:用 E2E 测试每个边界情况、使用脆弱选择器(如 .class-name-xyz)、测试间共享状态、跳过清理、每次提交都运行 E2E(太慢)。

5. 测试驱动开发(TDD)

红-绿-重构循环:

  1. RED:编写失败的测试,描述期望行为。
  2. GREEN:编写最小实现使测试通过。
  3. REFACTOR:在测试通过的前提下清理代码。

示例以购物车折扣计算展示:先写失败测试,再实现最小 Cart 类,最后重构为更清晰的方法拆分,测试始终通过。

6. 测试覆盖率

  • 行覆盖率:执行的行百分比;容易作弊,不保证质量。
  • 分支覆盖率:决策分支百分比;优于行覆盖率,能发现缺失的 else 情况。
  • 变异测试:捕获的变异百分比;引入 bug 检查测试能否发现;高质量指标但运行慢。

覆盖率目标参考:单元测试 80%(业务逻辑优先)、集成测试 60%(API 端点)、E2E 覆盖关键流程(用户旅程)。必须测试:所有公共 API 函数、所有错误处理路径、业务规则边界情况、安全敏感代码。可跳过:配置文件、生成代码、简单 getter/setter、第三方包装。

7. 测试组织

文件结构示例:单元测试与被测文件同目录(如 user.service.test.ts),集成测试放在 tests/integration/,E2E 测试放在 tests/e2e/,fixtures 存放测试数据,setup.ts 为测试配置。

命名约定:describe 被测单元 → describe 方法 → describe 场景 → it 描述行为。

8. 测试质量检查清单

  • 结构:遵循 AAA 模式、每个测试一个断言概念、描述性名称、测试独立无相互依赖。
  • 覆盖:正常路径、错误情况、边界情况、边界条件。
  • 可维护性:无不稳定测试、最小化 setup/teardown、Mock 位于边界、测试能经受重构。
  • 性能:单元测试每个 <100ms、集成测试合理、E2E 聚焦、启用并行化。

9. 常见测试错误

不要测试实现细节(应测试公共行为);不要机械地每个测试只写一个断言(应每个测试一个概念);不要复制粘贴测试(应使用测试辅助/工厂);不要在测试间共享状态(应隔离每个测试);不要跳过边界情况(应测试边界与错误);不要 Mock 一切(应只在边界 Mock);不要忽视不稳定测试(应修复或删除);不要总是先写代码后写测试(应在有益时使用 TDD)。

工具与框架

  • JavaScript/TypeScript:Jest(单元+集成)、Vitest(快速的 Jest 替代)、Playwright(E2E)、Cypress(E2E)、Testing Library(React/Vue 等)。
  • Python:pytest(单元+集成)、unittest(标准库)、Selenium(E2E)。
  • Ruby:RSpec(单元+集成)、Capybara(E2E)。
  • Go:testing 包(标准库)、testify(断言)。

相关技能

/code-review(审查测试质量)、/devops-cicd(在 CI/CD 中运行测试)、/debugging(用测试定位 bug)。

限制

资料未提供该技能的具体安装命令、收费模式、平台支持范围或实际使用效果数据,这些信息暂未提供。