第13章 进阶技巧:AI 生成代码的测试自动化
-
目标概述:进入进阶部分,首先讨论测试自动化在 AI 编码过程的重要作用。本章教授读者如何用AI来辅助生成单元测试代码,以及如何将持续测试融入开发循环,实现代码变更后自动运行测试,提升项目稳健性。这不仅巩固读者对代码正确性的重视,也展示AI在保证代码质量方面的用途。
-
编写测试用例的提示:演示如何通过提示让 AI 为之前章节的项目生成测试代码。例如选取 CLI 聊天机器人项目,提示AI:“为 chatobot.py 编写三个 PyTest 单元测试:情况1-正常对话返回预期回答,情况2-用户输入exit正常退出,情况3-遇到网络错误抛出异常”。AI 将输出对应的测试函数代码。截图展示这些 AI 生成的测试代码,并强调 AI 能快速覆盖常见场景,但也可能遗漏边角情况,需要我们审查。
-
集成测试与持续集成:介绍如何设置自动化测试环境,如使用 pytest 运行测试套件。指导读者编写一个简单的CI脚本或GitHub Actions配置,在每次代码生成/修改后运行测试。虽然这部分需要些编码细节,我们可利用AI生成 YAML 配置文件的片段。展示一个工作流程示意:开发者用AI生成代码 -> 触发测试 -> 测试结果反馈,若失败则根据信息提示AI修改代码。
-
Prompt 驱动测试:提出一种思路:让 AI 自己基于代码和需求生成测试输入并检查输出是否正确,即Prompt 级测试。例如利用ChatGPT描述:“如果函数应该返回列表,当输入X时,期望输出Y”,让AI直接判断当前代码行为是否一致,从而发现潜在问题。引用Google的做法:他们让AI先写代码再让AI写测试确保代码质量。虽然读者未必成熟应用,但介绍这一前沿思想拓宽视野。
-
可视化过程:用一个具体实例展示AI生成测试->运行测试->根据失败信息再让AI修复代码的循环。截图1:AI生成的测试,其中有一个故意失败(比如我们的聊天机器人没处理空输入,但测试覆盖了空输入应报错的情形)。截图2:运行pytest结果显示哪个测试失败。截图3:我们将失败原因(AssertionError等)反馈给AI,提示“修改代码通过测试”,AI 生成改进的代码。通过这组图文说明AI辅助调试的强大作用。
-
挑战与注意:讨论AI生成的测试本身也需要审查,不能绝对信任。特别是AI有时对功能理解偏差,写的断言不正确。因此人作为监督者要review测试是否真正验证需求。引入“测试即文档”思想:测试用例描述的期望行为本身帮助澄清需求,在人机协作开发中非常有益。
-
术语解释:澄清“单元测试”“集成测试”“持续集成(CI)”“断言”等概念。解释PyTest等测试框架基本原理。强调即使读者不懂所有代码,也应明白测试的通过与否决定了代码是否可信,从而愿意投入精力学习这部分。