测试覆盖率分析器Skill test-coverage-analyzer

这个技能帮助识别测试覆盖率的空白,并提出具体的测试用例以提高代码质量,适用于提高测试覆盖率、分析覆盖率空白和提出测试建议的场景。

测试 0 次安装 28 次浏览 更新于 3/3/2026

测试覆盖率分析器

这个技能帮助识别测试覆盖率的空白,并提出具体的测试用例以提高代码质量。

何时使用这个技能

  • 用户要求分析测试覆盖率
  • 用户想要提高测试覆盖率
  • 用户请求缺失测试的建议
  • 致力于提高代码覆盖率百分比
  • 用户提到"覆盖率空白"、“未测试代码"或"测试建议”

指令

1. 检测测试框架

识别项目中使用的测试框架:

JavaScript/TypeScript:

  • Jest: jest 在 package.json 或 jest.config.js
  • Mocha: mocha 在 package.json 或 .mocharc
  • Vitest: vitest 在 package.json 或 vitest.config.js
  • Jasmine: jasmine 在 package.json

Python:

  • pytest: pytest 在 requirements.txt 或 pytest.ini
  • unittest: 标准库,检查测试文件
  • coverage.py: coverage 在 requirements.txt

Ruby:

  • RSpec: rspec 在 Gemfile
  • Minitest: 标准库

Go:

  • 内置: go test (通过 go test -cover 覆盖)

Java:

  • JUnit: 在 pom.xml 或 build.gradle 查找 JUnit
  • JaCoCo: 覆盖工具配置

使用 Glob 和 Grep 查找配置文件。

2. 定位覆盖率报告

找到现有的覆盖率报告:

常见位置:

  • coverage/ 目录
  • .nyc_output/ (Node.js 的 NYC)
  • htmlcov/ (Python 的 coverage.py
  • target/site/jacoco/ (Java 的 JaCoCo)
  • 覆盖率文件:lcov.info, coverage.json, .coverage

如果没有覆盖率报告存在:

  • 指导用户运行覆盖率:npm test -- --coverage, pytest --cov 等。
  • 等待报告生成后再进行分析

3. 解析覆盖率数据

提取覆盖率信息:

lcov.info:

  • 行覆盖与总数
  • 函数覆盖与总数
  • 分支覆盖与总数
  • 按文件的未覆盖行号

从 coverage.json (Jest):

  • 语句覆盖百分比
  • 分支覆盖百分比
  • 函数覆盖百分比
  • 行覆盖百分比
  • 每个文件的未覆盖行

从 .coverage (Python):

  • 使用 coverage reportcoverage json
  • 缺失的行范围
  • 排除的行

从 HTML 报告:

  • 读取摘要统计
  • 识别覆盖率低的文件

4. 识别覆盖率空白

优先考虑需要测试的文件/函数:

高优先级:

  • 业务逻辑 0% 覆盖
  • 公共 API 和导出函数
  • 错误处理路径(catch 块,错误回调)
  • 边缘情况和边界条件
  • 关键路径(认证,支付,数据验证)

中优先级:

  • 部分覆盖的实用函数
  • 由公共 API 调用的私有函数
  • 配置和初始化代码

低优先级:

  • 简单的 getter/setter
  • 类型定义
  • 自动生成的代码
  • 第三方代码

5. 分析未测试的代码路径

对于每个有覆盖率空白的文件:

  1. 阅读源文件以理解代码结构
  2. 识别未测试的代码
    • 未覆盖的行和行范围
    • 未测试的条件分支(if/else)
    • 未覆盖的错误处理程序
    • 缺失的函数覆盖
  3. 分类缺失的测试
    • 正常路径测试
    • 错误/异常测试
    • 边缘情况测试
    • 集成测试

6. 生成测试建议

对于每个覆盖率空白,提出具体的测试用例:

格式:

文件:src/utils/validator.js (42% 覆盖)

缺失覆盖:
- 行 15-18:电子邮件验证错误路径
- 行 23-25:空输入处理
- 行 30-35:特殊字符的边缘情况

建议测试:
1. 测试电子邮件验证无效格式(覆盖行 15-18)
2. 测试验证器空字符串输入(覆盖行 23-25)
3. 测试名称中特殊字符处理(覆盖行 30-35)

测试用例详情应包括:

  • 测试描述
  • 输入数据
  • 预期输出/行为
  • 覆盖的行/分支

7. 创建测试桩(可选)

如果用户想要,生成测试文件桩:

  • 使用适当的测试框架语法
  • 包括 describe/test 块与 TODO 注释
  • 添加示例测试结构
  • 参考 templates/test-template.js (或适当的扩展名)中的模板

示例(Jest):

describe('Validator', () => {
  describe('validateEmail', () => {
    it('should reject invalid email format', () => {
      // TODO: 测试电子邮件验证错误路径(行 15-18)
      const result = validateEmail('invalid-email');
      expect(result.valid).toBe(false);
    });

    it('should handle empty string input', () => {
      // TODO: 测试空输入处理(行 23-25)
    });
  });
});

8. 计算覆盖率指标

提供摘要统计:

  • 总体覆盖率百分比
  • 按文件/目录的覆盖率
  • 没有测试的函数/方法
  • 覆盖率低的关键文件
  • 覆盖率趋势(如果有历史数据)

9. 优先推荐

按以下顺序排列建议:

  1. 影响:首先考虑关键业务逻辑
  2. 风险:高风险区域(安全,数据完整性)
  3. 复杂性:复杂逻辑需要更多测试
  4. 易用性:快速获胜(简单测试以获得高覆盖率增益)

10. 输出格式

以清晰、可操作的格式呈现发现:

覆盖率分析摘要
=========================

总体覆盖率:67%
- 语句:65%
- 分支:58%
- 函数:72%
- 行:67%

需要关注文件(按优先级排序):

1. src/payment/processor.js (23% 覆盖) - 高优先级
   - 缺失:支付失败的错误处理
   - 缺失:重试逻辑测试
   - 缺失:交易验证

2. src/auth/validator.js (45% 覆盖) - 中等优先级
   - 缺失:无效令牌处理
   - 缺失:过期会话测试

建议测试用例:
[每个文件的详细建议]

最佳实践

  1. 关注有意义的覆盖率:100% 覆盖率并不总是必要的
  2. 测试行为,而不是实现:建议测试以验证功能
  3. 优先考虑关键路径:首先进行认证、支付、数据验证
  4. 考虑测试类型:单元测试、集成测试和端到端测试
  5. 检查现有测试:不要建议已经存在的测试
  6. 现实的测试数据:在示例中使用合理的输入
  7. 覆盖率阈值:建议最低覆盖率目标(例如,80%)

运行覆盖率报告

根据检测到的框架提供命令:

Jest: npm test -- --coveragejest --coverage Vitest: npm test -- --coveragevitest run --coverage Mocha + NYC: nyc mocha pytest: pytest --cov=src --cov-report=html Go: go test -cover ./...go test -coverprofile=coverage.out JUnit + JaCoCo: mvn test jacoco:report

支持文件

  • scripts/parse-coverage.sh: 帮助脚本以提取覆盖率数据
  • templates/test-template.js: JavaScript 的测试文件模板
  • templates/test-template.py: Python 的测试文件模板
  • templates/test-template.go: Go 的测试文件模板