mcpField
E
exunit-code-review

exunit-code-review

github.com/existential-birds测试与质量8585 次安装11 周前更新
代码仓库

关于 exunit-code-review

面向 Elixir 团队的 ExUnit 测试代码审查指南,说明测试结构、外部边界模拟、测试适配器和数据库隔离。它还设定基于文件行号和验证步骤的审查门槛。

主要功能

  1. 01检查异步测试与测试组织
  2. 02仅在外部边界使用 Mox 模拟
  3. 03核对 Bypass、Swoosh 与 Oban 测试适配器
  4. 04检查 Ecto sandbox 数据库隔离
  5. 05按步骤验证审查发现并标注行号

适用场景

  1. 01审查 ExUnit 测试模块
  2. 02判断外部依赖是否需要模拟
  3. 03检查异步测试与数据库共享状态
  4. 04提交带文件和行号证据的审查发现

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/existential-birds/beagle --skill exunit-code-review

安装后在 Claude Code 中输入/exunit-code-review确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
exunit-patterns.md
integration-tests.md
mox-boundaries.md
test-adapters.md

详细介绍

ExUnit 代码审查

快速参考

问题类型参考资料
异步测试、setup、describe、标签references/exunit-patterns.md
基于行为的模拟、预期references/mox-boundaries.md
Bypass、Swoosh、Oban 测试references/test-adapters.md
模拟什么与使用真实对象、Ecto sandboxreferences/integration-tests.md

模拟边界原则

在外部边界进行模拟:

  • HTTP 客户端、外部 API、第三方服务
  • 缓慢的资源:文件系统、电子邮件、作业队列
  • 非确定性对象:DateTime.utc_now()、:rand

不要模拟内部代码:

  • Context、schema、GenServer
  • 内部模块、PubSub
  • 你编写的任何内容

审查清单

测试结构
  • 除非需要共享数据库状态,否则测试均为 async: true
  • 使用 describe 块对相关测试进行分组
  • 使用 setup 提取通用测试数据
  • 测试具有清晰的准备/执行/断言结构
模拟
  • 使用 Mox 模拟外部边界(HTTP、API)
  • 为可模拟的接口定义行为
  • 不模拟内部模块
  • 在 setup 中使用 verify_on_exit! 执行严格模拟
测试适配器
  • 使用 Bypass 模拟 HTTP 端点
  • 使用 Swoosh.TestAdapter 测试电子邮件
  • 使用 Oban.Testing 断言后台作业
数据库
  • 使用 Ecto.Adapters.SQL.Sandbox 实现隔离
  • 异步测试不共享数据库状态
  • 一致地使用 fixtures/factories

有效模式(不要标记)

  • 单元测试中使用模拟,集成测试中使用真实对象 — 不同测试级别有不同需求
  • 集成测试中不模拟数据库 — 数据库属于内部组件
  • 简单的内联测试数据 — 并非所有内容都需要工厂
  • 通过公共 API 测试私有函数 — 正确做法

上下文相关规则

问题仅在以下情况下标记
未启用异步测试确实需要共享状态
缺少模拟存在外部调用,且没有模拟/Bypass
模拟内部模块被模拟的模块属于内部代码

检查关卡(按顺序)

按顺序完成。对于某个问题,在前一步通过之前不要给出审查发现。

  1. 文件中的证据 — 打开测试模块(或辅助文件),并将判断关联到具体行。

    • 通过条件: 每条潜在的审查发现都包含 [FILE:LINE],并且对该行(或明确指出的相邻行)上的内容作出一句事实描述,而不是泛泛地批评风格。
  2. ExUnit 误报否决 — 根据具体情况检查本技能的有效模式和上下文相关规则。

    • 通过条件: 你能用一句话说明“此情况不属于‘不要标记’/‘仅在以下情况下标记’”,否则就放弃该审查发现。
  3. 跨协议验证 — 对同一条审查发现应用 review-verification-protocol(例如,阅读完整函数/代码块,在声称“未使用”之前搜索其用法)。

    • 通过条件: 至少满足一项与该判断类型相关的协议检查;若有人质疑,该检查应能出现在你的理由中。

提交审查发现前

只有在通过**检查关卡(按顺序)**并满足所链接协议的要求后,才按每条审查发现使用 [FILE:LINE] ISSUE_TITLE 格式。

评论

支持 Markdown