用 TDD 让 AI 编码代理实现 Python 版本比较器

难度:进阶 · 来源:Real Python · 原文发布:2026-11-09

你将学到什么(3条以内要点)

  • 掌握“人工定契约与首个测试 → 代理补测试 → 人工加固 → 代理实现 → 审查 diff”的 AI 代理 TDD 五步循环。
  • 用 pytest 为 Python Version 版本比较器建立可执行契约,并理解红、绿、重构状态。
  • 学会用测试边界约束 AI 编码代理,避免代理同时写测试和实现造成“自证正确”。

前置条件

  • Python 3.11 或更新版本,安装 pytest;建议先建虚拟环境。
  • 一个能读写项目文件的编码代理;原文演示 Claude Code,但 GitHub Copilot CLI、Antigravity CLI、OpenCode 也可按同一流程。
  • 熟悉 pytest 基本用法,尤其是参数化测试;有 TDD 经验更好但非必需。
  • 示例项目只依赖标准库,额外只需 pytest。

步骤

  1. 建项目骨架。创建 version-check/,其中包含 version_check/__init__.py、空的 version_check/core.py,以及 tests/test_core.py。在 __init__.py 中重导出 Version,让测试直接从包导入:
from version_check.core import Version
__all__ = [ "Version" ]
  1. 先写契约,不写实现细节。原文把契约限定为三条:Version(text) 把字符串解析成可比较对象;Version 实例可用 Python 标准比较运算符比较;非法字符串抛出 ValueError。范围覆盖 release、pre-release、dev、post-release,epoch、local version、v 前缀不在本教程范围。
  2. 手写第一个测试,把契约钉死。在 tests/test_core.py 写入:
from version_check import Version

def test_equal_versions_compare_equal ():
    assert Version ( "1.2.0" ) == Version ( "1.2.0" )

def test_smaller_release_sorts_first ():
    assert Version ( "1.2.0" ) < Version ( "1.3.0" )
  1. 跑红。项目根目录执行:
python -m pytest

此时 core.py 仍为空,预期出现 ImportError: cannot import name 'Version' from 'version_check.core',这是 TDD 的 red 状态。
5. 让代理补测试。从项目根启动代理,给它看契约和首个测试,要求在 core.py 仍为空时,在 tests/test_core.py 中按同样风格增加测试。关键点是先测试、后实现;不要先让代理写实现再补测试。
6. 人工审查并加固测试。逐条对照契约检查代理生成的测试,补上漏掉的规则和失败用例;测试应描述外部行为,而不是内部实现计划。
7. 交给代理实现。要求代理只改实现代码,直到测试通过;同时封锁对 tests/ 的写入,避免代理改测试来“通过”。
8. 审查 diff。检查代理对实现代码的改动,确认没有绕过契约,然后进入下一个功能或重复循环扩展契约。

常见坑/注意事项

  • 如果让代理同时写测试和实现,测试通过只能说明代理同意自己,不能证明行为正确。
  • 不要在代理补测试前提供实现计划;否则测试可能只是在验证你的计划,内部一改就碎。
  • 代理实现阶段要保护 tests/,原文明确要求 block writes to tests/。
  • 契约故意只写三条是原文的教学设计,边界并不完整;可在后续循环中扩展,例如把原文列为范围外的 epoch、local version、v 前缀纳入契约。
  • 这是 intermediate 难度教程,不适合完全不懂 pytest 的读者直接上手。

原文链接:https://realpython.com/tdd-ai-agents/


原文:TDD With AI Agents: Design the Tests First, Let the Agent Implement(本文为采集智能体整理的导读,版权归原作者,请阅读原文获取完整内容)

← 用 Ollama 嵌入模型构建 RAG 检索示例已经是最后一篇
AI技术网博主

独立开发者,记录 AI、开发与效率工具。

查看主页

评论(0)

还没有评论,来说两句。
登录后即可参与回复。立即登录 或 注册账号