你正在编写一个支付回调接口,本地测试通过但上线后偶发500错误,希望让Claude生成能真正复现并定位问题的单元测试用例,而不是空泛地建议“加个test case”。那具体该如何撰写提示词?答案是:严格依据生产日志、原始请求体、HTTP头、代码边界和验证路径,生成可执行的单元测试,形成“复现+定位+验证”的闭环。需要一字不改地粘贴包含时区偏移的Jackson反序列化堆栈,锁定PaymentCallbackController.java第87~92行,仅修改测试类,不动DTO、Service或Jackson配置,注入带有"+08:00"日期和浮点精度误差的JSON,强制命名以shouldFailWhen_开头,首行注释REPRO,次行注释EXPECT异常断言。
将真实报错日志原样粘贴到提示词开头
直接复制生产环境日志中那段红色堆栈信息,包括时间戳、服务名、完整异常类名和嵌套的cause。千万不要删除“Caused by”之后的几行——Claude需要看到底层是Jackson反序列化失败,而不是只看顶层的HttpServerErrorException。
这一步必须一字不差。如果你随意写成“报了个反序列化错误”,Claude会按通用场景生成测试,比如测空字符串或null,而你的实际问题是日期格式为"2026-06-13T14:22:07+08:00"但Jackson配置只认Zulu时区。
【真实日志中带有时区偏移量+08:00,但测试用例若忽略该细节,将无法复现线上问题】
绑定具体代码位置与不可修改的边界
在提示词中明确写出:你正在修改的文件是PaymentCallbackController.java第87~92行,其中handleCallback()方法调用了paymentService.process(callbackDto);你只能改动测试类,不能触碰DTO定义、Service实现或Jackson配置。
明确“禁止生成代码”的区域比说明“要生成什么”更重要。否则Claude可能会擅自重写一个带有@JsonIgnore的DTO字段,而你可能连PR权限都没有。
强制注入最小可复现输入
方法一:提供脱敏后的原始请求体片段
直接粘贴curl命令中-X POST后面的JSON,保留换行缩进和所有字段,即便某个字段值是"amount":"99.90000000000001"这种浮点误差——这正是触发BigDecimal构造异常的关键点。
方法二:给出HTTP头关键项
写明:Content-Type: application/json;charset=UTF-8 和 X-Request-ID: req_abc123xyz。很多测试框架默认不设charset,导致中文字段乱码,进而引发后续校验失败。
注意:如果原始请求包含签名头X-Signature,必须声明“测试中跳过签名验证”,否则Claude会傻乎乎地去模拟HMAC逻辑,偏离核心问题。
要求输出必须包含可执行验证路径
第一步:生成的测试方法名必须以shouldFailWhen_开头,例如shouldFailWhen_amountHasFloatingPointPrecisionError();
第二步:每个测试方法体内第一行必须是// REPRO: copy-paste this JSON into Postman to trigger same 500;
第三步:在断言前插入一行注释// EXPECT: throws IllegalArgumentException with message containing "Cannot construct instance of java.math.BigDecimal"。
这三步缺一不可。没有第一行,你没法快速对齐用例意图;没有第二行,你就得手动还原请求体;没有第三行,CI跑过就以为没问题,其实只是没抛对异常。
