要让codex生成可运行、高覆盖、稳定的测试代码,必须明确指定目标函数路径、测试框架版本、关键业务与异常分支、真实i/o样例、外部依赖mock路径及测试文件落盘规范。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你想让 Codex 生成的测试代码能真正跑通、覆盖关键路径、不因 mock 错位或断言漂移而失效,就必须在提需求时就把测试要求钉死,不能只说“写个测试”。
明确告诉 Codex 测什么函数、在哪、用什么框架
第一步:在指令开头直接点名目标函数和路径,例如:“为 Python 文件 src/auth/login_handler.py 中的 validate_and_issue_token() 函数生成 pytest 测试”。
这一步漏掉路径或函数名,Codex 就只能猜——它可能去测同名但不同模块的函数,也可能生成空骨架。你得让它一眼锁定目标。
第二步:声明测试框架和语言版本,比如加上“使用 pytest 8.2+,Python 3.11 环境”。不写清楚,它可能按默认 Python 3.9 生成 type hint 兼容写法,结果在你项目里报 SyntaxError。
指定必须覆盖的业务分支与异常场景
方法一:用破折号逐条列出关键路径
- 用户凭证为空 → 应返回 400 及 'missing_credentials' 错误码
- token 签名验证失败 → 应触发 InvalidSignatureError 异常
- 用户被禁用 → 应返回 403 且 reason 字段含 'disabled_account'
方法二:按优先级排序,从高到低列三类场景
① 必须覆盖的主流程:正常登录成功,返回 status=200、token 字段非空、expires_in ≥ 3600
② 必须覆盖的权限类异常:用户角色不足(role='guest')、租户隔离校验失败
③ 必须覆盖的系统类异常:Redis 连接超时、JWT 库抛出 PyJWKError
注意:Codex 不会主动推导“哪些是业务关键分支”,它只响应你写的文字。你没写的场景,它大概率跳过。
通过本地 Codex 或 OpenClaw OAuth 凭证直接调用 ChatGPT/Codex Responses 的 image_generation 工具来生成或编辑光栅图像,然后保存
绑定真实输入输出样例,锁死断言逻辑
在指令末尾追加两组以上真实调用记录,格式必须严格:
- 输入:user_id=7821, password='xk9#LmQ2', client_ip='203.0.113.5' → 输出:{'status': 200, 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...', 'expires_in': 3600}
- 输入:user_id=7821, password='wrong', client_ip='203.0.113.5' → 输出:{'status': 401, 'reason': 'invalid_password', 'retry_after': 60}
这一步是防止 Codex 生成“假断言”的关键。没有样例,它可能写 assert 'token' in response,但实际返回字段叫 access_token;也可能对动态生成的 JWT 字符串做全等断言,导致每次运行都失败。
强制要求 mock 外部依赖并注明路径
如果函数内部调用了 db.get_user_by_id() 或 auth.verify_password(),必须显式说明:
“该函数依赖 src/db/queries.py 中的 get_user_by_id() 和 src/auth/hashing.py 中的 verify_password(),请用 pytest-mock 替换,mock 返回值需匹配上述输入输出样例。”
不写清 mock 路径,Codex 可能 mock 错文件(比如 mock 了 tests/utils/mock_db.py 而不是真实调用链里的 src/db/queries.py),测试永远跑不通。
定义测试文件落地位置与命名规范
最后加一句硬性指令:“生成的测试文件必须保存在 tests/unit/auth/test_login_handler.py,函数名以 test_ 开头,每个测试用例必须包含唯一的 pytest.mark.parametrize 参数组合。”
这能避免 Codex 把测试生成到临时目录或错放至 integration/ 下。命名不统一还会导致 pytest 自动发现失败,你得手动改文件名才能跑起来。










