SuperAPI AI 工具集

test-quality-analysis

测试与质量

查看项目

更新于 10-15 12:54

技能介绍

Test Quality Analysis 是一套用于分析与改进测试质量的知识体系,重点在于检测测试坏味道(test smells)、过度 Mock(overmocking)、覆盖不足以及各类测试反模式。

用途 它面向测试代码本身的质量审查,帮助识别那些看似通过、实则脆弱或无效的测试,从而提升测试的正确性、可靠性与可维护性。

核心维度 该体系从六个维度评估测试:正确性(测试验证正确的行为)、可靠性(测试是确定性的、不 flaky)、可维护性(测试易于理解)、性能(测试运行快速)、覆盖率(测试覆盖关键代码路径)、隔离性(测试不依赖外部状态)。

测试坏味道与典型问题

  1. 过度 Mock:模拟过多依赖会让测试变得脆弱。检测信号是 Mock 数量超过 3-4 个、模拟纯函数、复杂的 Mock 设置。修复方式是只 Mock I/O 边界(API、数据库、文件系统)。资料示例中给出了对比:反例是模拟 mockAdd、mockMultiply 等实现细节,正例是仅模拟外部定价 API 并断言总价结果。
  2. 脆弱测试(Fragile Tests):测试会因无关的代码变更而失败,例如使用 ".form-container > div:nth-child(2) > button" 这类实现相关选择器;推荐改用语义化选择器,如 getByRole('button', { name: 'Submit' })。
  3. 不稳定测试(Flaky Tests):测试结果非确定性地通过或失败,常见于竞态条件,例如用 setTimeout 等待固定时长;正确做法是正确使用 async/await 等待真实结果。
  4. 弱断言(Poor Assertions):断言过于含糊,例如仅 expect(users).toBeDefined();应使用具体、有意义的断言,如 toMatchObject 校验字段与类型。

分析工具 资料列出了覆盖率命令:Vitest 使用 bun test --coverage 并打开 coverage/index.html;可用 bun test --coverage --coverage.thresholds.lines=80 检查阈值;Python 使用 pytest-cov,命令为 uv run pytest --cov --cov-report=html 并打开 htmlcov/index.html。

最佳实践 单元测试质量遵循 FIRST 原则:Fast(毫秒级运行)、Isolated(测试间无依赖)、Repeatable(每次结果一致)、Self-validating(明确的通过/失败)、Timely(与代码同步编写)。Mock 准则:只 Mock 外部依赖,不要 Mock 业务逻辑或纯函数,尽量使用真实实现,每个测试的 Mock 上限为 3-4 个。覆盖率目标:业务逻辑行覆盖率 80% 以上,关键路径(认证、支付)100%,所有错误路径与边界条件均被测试。测试结构采用 AAA 模式(Arrange、Act、Assert),资料给出了用户注册的示例。

代码审查清单 包括:测试验证行为而非实现、断言具体且有意义、无 flaky 测试(时序、顺序问题)、正确使用 async/await、测试名称清晰描述行为、尽量减少重复代码、关键路径有测试、同时覆盖正常路径与错误情况。

常见反模式 一是测试实现细节,例如用 spyOn(Math, 'sqrt') 并断言被调用,这是测试“如何做”而非“结果”;正例是直接断言计算结果。二是过度 Mock,反例是模拟 add 这类纯函数,正例是导入真实实现,只 Mock 外部服务(如支付网关)。

相关主题 资料提到可参见 vitest-testing(TypeScript/JavaScript 测试)、playwright-testing(端到端测试)、mutation-testing(验证测试有效性)。

适用场景 适用于审查现有测试代码、评估测试质量、识别并修复测试反模式,以及为测试编写建立规范。

限制 资料未提供该技能的具体安装方式、支持的运行环境、平台信息或收费情况,这些内容暂未提供。