【译】先运行测试

原文:Simon Willison,First run the tests,发表于 2026 年 2 月 24 日。本文为中文译文。

使用编码 Agent(Coding Agent)工作时,自动化测试已经不再是可选项。

过去,不写测试的借口是:编写测试很耗时,而且在代码库快速演进时,反复重写测试的代价很高。但当 Agent 只需几分钟就能把测试调整妥当时,这些借口就不再成立了。

测试对于确保 AI 生成的代码确实能做到它声称能做的事,也至关重要。如果代码从未被执行过,那么部署到生产环境后还能正常工作,就纯粹是运气了。

测试也是帮助 Agent 快速熟悉现有代码库的好工具。留意一下,当你向 Claude Code 或类似工具询问某项已有功能时会发生什么:它们很可能会找到并阅读相关测试。

Agent 本来就倾向于做测试,但项目中已有一套测试,几乎肯定会促使 Agent 对它所做的新改动进行测试。

每当我针对一个已有项目开启新的 Agent 会话时,都会先用下面这句话的某种变体作为提示词:

First run the tests(先运行测试)

对于我的 Python 项目,我已经配置好了 pyproject.toml,因此也可以改用下面这句提示词:

Run "uv run pytest"(运行 uv run pytest)

这些只有四个英文单词的提示词有几方面的作用:

  1. 它告诉 Agent,项目中有一套测试,并迫使它弄清楚如何运行这些测试。这几乎能确保 Agent 今后也会运行测试,以确认自己没有破坏任何东西。
  2. 大多数测试框架(test harness)都会让 Agent 大致了解测试的数量。这个数量可以作为衡量项目规模和复杂程度的间接指标,也暗示 Agent:如果想进一步了解项目,就应该去搜索测试本身。
  3. 它让 Agent 进入测试思维。运行过测试之后,Agent 自然会在后续加入自己编写的测试,进一步扩充测试套件。

和“Use red/green TDD”(使用 red/green TDD)一样,“First run the tests”(先运行测试)也是一句只有四个英文单词的提示词,却涵盖了模型中早已内置的大量软件工程规范。