Codex CLI 写完代码别只测正常值:我给 limit 补了 5 个边界测试

还没有安装 Codex CLI?可以先看上一篇:
Windows 一键安装 Codex CLI:Node.js 一起装好

上一篇我确认了 /api/books?limit=1 的路由问题,也把 limit 的校验写进了服务端。但实现有校验,测试却只覆盖了一个正常值。

这次我没有让 Codex 修改生产代码,只在独立项目 codex-limit-boundary-books-api 中补测试。修改前 3 项通过,补完 5 个边界场景后 8 项全部通过;src/server.js 前后 SHA-256 一致。

项目和基线

项目代码在仓库根目录:codes/codex-limit-boundary-books-api/。它没有第三方依赖,服务端使用 Node.js 内置 http 模块。

原来的测试只有:

GET /health
GET /api/books
GET /api/books?limit=1

进入项目后先运行:

cd .\codes\codex-limit-boundary-books-api
npm test

真实基线是 3 项通过、0 项失败。

补充边界测试前的真实基线输出

图 1:补充边界测试前的真实基线输出。

先写清楚规则

当前服务端规则是:

  • 不传 limit,返回全部图书。
  • limit 是正整数,返回前 limit 本书。
  • limit0、负数、非数字或小数,返回 400
  • limit 大于当前图书数量,返回现有全部图书。

没有规则时,测试越多越容易变成堆数字。先把预期写清楚,再补输入。

补 5 个场景

非法输入用循环覆盖 4 个值:0-1abc1.5,它们都应该返回 400

for (const limit of ["0", "-1", "abc", "1.5"]) {
  test(`GET /api/books?limit=${limit} rejects an invalid limit`, async () => {
    const response = await fetch(`${baseUrl}/api/books?limit=${limit}`);
    assert.equal(response.status, 400);
  });
}

再补一个 limit=999。它是合法正整数,但当前只有两本书,预期是返回现有两本,不造数据。

新增的 4 个非法输入和 1 个超大合法值测试。

图 2:新增的 4 个非法输入和 1 个超大合法值测试。

修改后验收

重新运行:

npm test

8 项测试全部通过,退出码为 0
补充边界测试后的真实输出

图 3:补充边界测试后的真实输出。

这轮没有调用 Codex 修改代码,新增测试由我手动完成,所以不能把它写成 Codex 产出。

确认生产代码没有变化

示例项目没有单独 Git 基线,这次用 src/server.js 前后 SHA-256 核对:

SERVER_HASH_UNCHANGED=True
Only test/server.test.js changed

生产代码哈希一致,只有测试文件增加覆盖

图 4:生产代码哈希一致,只有测试文件增加覆盖。

仍未覆盖的输入包括空格、指数形式、超出安全整数范围的数值,以及非 GET 请求。这些要不要支持,应该先由接口规则决定。

安全提醒

这个示例项目不需要 API Key。文章、截图和 Git 历史中都不要放真实 API Key、Authorization、Cookie、配置文件原文或后台截图。

示例代码

本文使用的独立项目已放在 Gitee:

https://gitee.com/heihei_66/codex-demo

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐