Skip to content

feat: test-value-detector action — 检测当前提交中的测试是否为有价值测试 #48

@Svtter

Description

@Svtter

需求

创建一个新的 OpenCode Action:test-value-detector,用于在 PR/commit 中自动检测新增或修改的测试是否为有价值的测试(valuable test)。

背景

CI 中大量测试要么是走过场(空断言、硬编码返回值、无实际校验逻辑),要么与被测代码完全脱节。这类测试虽然能"通过",但对代码质量毫无贡献,反而增加了维护负担和 CI 时间。需要一个 action 来自动识别并标记这些低价值测试。

预期行为

  1. 触发时机:PR 提交 / push 包含测试文件变更时自动运行
  2. 检测维度(建议但不限于):
    • 空断言 / 软断言:测试中没有任何 assert、expect、require 等断言调用
    • 硬编码 mock:mock 返回值与实际业务逻辑无关,测试永远通过
    • 测试与实现脱节:测试引用的函数/方法在对应源码中不存在或签名不匹配
    • 重复测试:与已有测试逻辑完全重复
    • 无边界/异常覆盖:只测 happy path,没有任何边界条件或异常输入
  3. 输出
    • 在 PR 中添加 comment,列出检测到的低价值测试及其问题分类
    • 可选:设置 PR label(如 low-value-tests)或 PR check status(warn/fail)
    • 输出 SARIF 格式供 code scanning 消费(可选)

输入参数建议

参数 默认值 说明
github-token "" GITHUB_TOKEN,用于评论和状态检查
zhipu-api-key "" ZHIPU_API_KEY,用于 OpenCode LLM 分析
opencode-go-api-key "" OPENCODE_GO_API_KEY 备选
model "zai-coding-plan/glm-5.1" 使用的模型
prompt 内置 prompt 自定义检测 prompt(覆盖默认)
test-patterns "**/*_test.*, **/test_*, **/tests/**" 测试文件匹配模式
fail-on-low-value "false" 是否将低价值测试视为 CI 失败
comment-mode "always" 评论策略:always / on-failure / off

参考

  • 现有 action 结构参考:reviewfeature-missing
  • 可复用 setup-opencode + run-opencode 组合
  • Prompt 应聚焦于测试质量分析,而非代码风格或逻辑 review

实现建议

  • Action 入口:action.yml + run-opencode 调用
  • 内置 prompt 模板,覆盖上述检测维度
  • 支持 prompt 覆盖,让用户按项目需求定制检测逻辑
  • 考虑大型仓库的性能:只分析 diff 中涉及的测试文件,不扫描全量

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions