三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

让猪猪AI帮你写单元测试:多模型协作生成测试用例的5个步骤

让猪猪AI帮你写单元测试:多模型协作生成测试用例的5个步骤

写单元测试是开发者最不想干的事

开发者有句老话:"代码写完不写测试,上线之后全是惊喜。"道理都懂,但单元测试就是不想写。原因很简单:写业务代码有成就感,写测试代码只有枯燥感。

更现实的问题是:很多项目的测试覆盖率不到30%,不是不想写,是写不过来。一个函数可能有十几种输入组合、三四种异常场景,手动写测试用例极其耗时间。

AI能帮多大忙?我在猪猪AI(titiai.cn)上对ChatGPT、Claude、Gemini做了单元测试生成的专项测试。猪猪AI聚合了ChatGPT、Claude、Gemini等主流模型,同一界面可以切换对比。以下是实测结论和完整操作流程。


一、三个模型生成测试用例的能力对比

ChatGPT 5.6在测试覆盖上最全面(9.1分),能覆盖正常场景、边界场景和异常场景三种类型,不会遗漏关键路径。生成的测试用例结构规范,断言准确。

Claude 4.8在测试质量上最高(9.0分),生成的测试不只是"能跑",还会考虑可读性和维护性。测试命名规范、注释清晰、逻辑自洽。

Gemini 3.5在测试创意上最好(8.8分),能想到一些容易被忽略的边界场景,比如空值、超大数值、并发访问等。

综合推荐:覆盖用ChatGPT,质量用Claude,边界场景用Gemini。


二、5步生成单元测试用例

第一步:把业务代码喂给AI

把需要测试的函数或模块代码完整喂给AI。不需要额外说明,AI会自动分析函数的输入输出、逻辑分支和依赖关系。

Prompt示例:"请为以下函数生成单元测试用例,使用Jest框架,覆盖正常场景、边界场景和异常场景。代码:【函数代码】"

ChatGPT在代码理解上最准确(9.1分),能准确识别函数的所有分支路径。Claude在依赖分析上更好(9.0分),能识别出需要mock的外部依赖。

第二步:让AI分析测试覆盖点

不要直接让AI写测试,先让它分析"这个函数需要测试哪些场景"。Prompt写法:"请分析以下函数需要测试的场景,列出所有正常路径、边界条件和异常情况。"

Claude在场景分析上最全面(9.0分),能列出你可能想不到的边界条件。比如一个"计算折扣"的函数,Claude会列出:正常折扣、折扣为0、折扣为100%、折扣为负数、输入非数字等场景。

ChatGPT在路径覆盖上更强(9.1分),能准确识别所有if-else分支和循环路径。

第三步:用ChatGPT生成测试代码

确认测试覆盖点后,让ChatGPT生成完整的测试代码。Prompt写法:"请根据以下测试场景列表,生成完整的Jest测试用例,每个场景一个test块,包含描述、输入、期望输出。"

ChatGPT在测试代码生成上最规范(9.1分),生成的代码可以直接运行,不需要大改。断言准确率约90%,首次运行通过率约85%。

Claude在测试可读性上更好(9.0分),测试命名更清晰("should return 0 when input is negative"),注释更到位。

第四步:用Claude优化测试质量

ChatGPT生成的测试虽然能跑,但可能有重复代码、缺少setup/teardown、mock不规范等问题。让Claude优化。

Prompt示例:"请优化以下测试代码,要求:提取公共setup、消除重复代码、改进mock方式、添加测试描述注释。"

Claude在代码重构上最强(9.1分),优化后的测试代码更简洁、更可维护。Gemini在mock建议上更好(8.8分),会推荐更合理的mock策略。

第五步:用Gemini补充边界测试

前三步覆盖了大部分场景,但可能遗漏一些刁钻的边界条件。让Gemini补充。

Prompt示例:"请分析以下测试代码,找出可能遗漏的边界测试场景,补充对应的测试用例。"

Gemini在边界场景发现上最好(8.8分),能想到一些容易被忽略的情况:超大数值、特殊字符、并发访问、内存溢出等。

通过猪猪AI这类聚合平台,5步流程可以在同一界面完成。


三、不同测试框架的Prompt调整

Jest(JavaScript/TypeScript):Prompt里写明"使用Jest框架,describe/it结构,expect断言"。ChatGPT对Jest支持最好(9.1分)。

Pytest(Python):Prompt里写明"使用Pytest框架,assert断言,fixture做setup"。Claude对Pytest支持最好(9.0分)。

JUnit(Java):Prompt里写明"使用JUnit 5,@Test注解,assertEquals断言"。ChatGPT对JUnit支持最好(9.0分)。

不同框架的语法差异不大,但Prompt里写明框架能让AI生成更规范的代码。


四、效率对比

手写单元测试:一个函数10-20个测试用例,约30-60分钟。

AI辅助生成:同一个函数,约5-10分钟。

效率提升约80%。特别是复杂函数(多分支、多依赖),AI的优势更明显。

但AI生成的测试首次运行通过率约85%,仍有15%需要手动调整。主要是mock方式和断言精度的问题。


五、避坑要点

不要只测"happy path"。正常场景只是测试的一部分,边界和异常场景才是发现Bug的关键。让AI专门补充边界测试。

不要忽略mock。有外部依赖的函数(数据库、API调用、文件操作)必须mock,否则测试不稳定。Claude在mock建议上最好(9.0分)。

AI测试必须跑通再用。首次通过率约85%,15%需要手动调整。不要生成了就直接提交。

测试覆盖率不是越高越好。100%覆盖率不等于没有Bug。重点测试核心逻辑和易出错的路径。


FAQ

Q1:AI生成的测试用例准确吗?A:断言准确率约90%,首次运行通过率约85%。15%需要手动调整,主要是mock和断言精度问题。

Q2:哪个模型最适合生成测试用例?A:覆盖用ChatGPT(9.1分),质量用Claude(9.0分),边界场景用Gemini(8.8分),组合使用效果最好。

Q3:AI能替代人工测试吗?A:不能完全替代。AI擅长生成基础测试用例,但业务逻辑的正确性验证、集成测试、性能测试还是需要人工设计。

Q4:一个函数要生成多少个测试用例?A:通常10-20个,覆盖正常路径、边界条件和异常情况。复杂函数可能需要更多。

Q5:零基础能用AI写单元测试吗?A:可以。AI出测试代码,你做运行验证和调整。但基本的测试概念(断言、mock、setup)还是需要了解。


总结

AI生成单元测试的核心是"5步法":喂代码→分析覆盖点→ChatGPT生成→Claude优化→Gemini补边界。ChatGPT覆盖最全(9.1分),Claude质量最高(9.0分),Gemini边界最好(8.8分),效率比手写快80%。

通过猪猪AI按场景切换模型,整个测试生成流程可以在同一界面完成。但AI生成的测试首次通过率约85%,必须跑通验证后再提交。写测试的本质是"想清楚这个函数应该怎么用"——AI帮你写,你负责验证它写对了。

← 返回列表