用途
pytest-code-review 是一个专门用于审查 pytest 测试代码的技能。它适用于评审 test_*.py 文件、检查异步测试函数、核查 fixture,以及审查 mock 与 patch 的使用。其目标是在给出具体审查结论前,先确保对测试代码的关键维度完成有序核查。
主要能力
技能围绕四类常见测试问题进行组织,并分别对应参考文档:
- 异步测试:async def test_*、AsyncMock、await 模式,参考 references/async-testing.md。
- Fixtures:conftest.py、factory fixtures、作用域、清理,参考 references/fixtures.md。
- 参数化:@pytest.mark.parametrize 与 DRY 模式,参考 references/parametrize.md。
- Mocking:AsyncMock 调用追踪、patch 模式、何时应该 mock,参考 references/mocking.md。
使用方式:按顺序通过审查门禁
技能要求按顺序进行审查,在每一道适用的门禁通过前,不对 pytest 特有问题下断言。各门禁的通过条件如下:
- 范围文件:列出所有将要引用的 test_*.py 和 conftest.py;对列表之外的文件不给出发现项。
- 异步与同步:对每个范围内文件,说明其是否使用 async def test_* / await;如果是,在批评异步用法前先打开 references/async-testing.md。
- Fixtures:如果共享初始化逻辑重要,指出 conftest.py 路径,或说明不存在;对于 yield fixture,在声称资源泄漏前先确认是否存在清理。
- patch / mocks:对任何 patch 或 mock 的批评,给出符号被使用的导入路径(调用点),或标记为 N/A;当 mocking 是审查核心时,打开 references/mocking.md。
- 发现项:每条发现都需包含文件路径与行号,或测试节点 id,而不是笼统复述规则。
审查清单
技能提供以下检查项:
- 被测异步代码对应的测试函数应为 async def test_*;
- 异步依赖应使用 AsyncMock,而非 Mock;
- 所有异步 mock 和协程都应被 await;
- 共享初始化逻辑应放在 conftest.py 中;
- fixture 作用域应恰当(function、class、module、session);
- yield fixture 应在 finally 块中正确清理;
- 相似测试用例应使用 @pytest.mark.parametrize;
- 多个测试函数之间不应重复测试逻辑;
- mock 应正确追踪调用(assert_called_once_with);
- patch() 应指向正确位置(使用处,而非定义处);
- 不应 mock 本应被测试的内部实现;
- 应保持测试隔离(测试之间无共享可变状态)。
何时加载参考文档
- 审查异步测试函数 → async-testing.md
- 审查 fixture 或 conftest.py → fixtures.md
- 审查相似测试用例 → parametrize.md
- 审查 mock 与 patch → mocking.md
审查问题
技能给出以下引导性问题:
- 所有异步函数是否都用 async def test_* 测试?
- fixture 作用域是否恰当,并带有适当清理?
- 相似测试用例是否可以通过参数化来减少重复?
- mock 是否正确追踪调用,并用在正确位置?
适用场景与限制
该技能主要面向 pytest 测试代码的评审环节,尤其适合涉及异步代码、fixture 共享初始化、参数化与 mocking 的项目。资料未提供具体的安装命令、运行环境依赖、支持的平台、收费方式或价格信息,这些内容暂未提供。