python-testing-conventions
这是一个为 Python 项目提供测试约定的技能,重点讨论测试代码中复制与可读性的取舍、fixture 应覆盖的范围,以及何时该用真实的依赖而非 mock。它主张“fixture 优先”:测试所需的各种准备(临时目录树、伪造的 HOME、被替换的 c.run、构造好的对象、monkeypatch 的环境变量)都应写成 pytest fixture,必要时提升到 conftest.py,并优先使用 tmp_path、monkeypatch、capsys、caplog 等内置 fixture。它区分了 DAMP 与 DRY 的不同适用面:准备机制保持 DRY,测试所验证的场景保持显式可读;真正的输入到期望值矩阵用 parametrize,而逻辑不同的场景应另写测试。它还强调不要对套件能够完整掌控生命周期的依赖做 mock,例如 SQLite 文件、临时目录、本地队列、自己的入口程序子进程,应运行真实对象;只有第三方 HTTP API 之类无法掌控的才适合手写替身。此外,测试中不应运行会改动代码的命令,除非被测对象本身就是该改动。技能由 python-conventions 拆分而来,pytest 自身的配置仍归仓库的质量工具链管理。