单元测试2-基于AI自动生成
传统的单元测试编写会在初期增加工作量,是广大工程师们都又爱又恨的存在。
不过近几年AI发展迅猛,已经可以主导、辅助生成单元测试了,那肯定是要使用、实践的。
但这不意味着大家可以0基础直接让AI生成,毕竟生成后大家也需要人工code review一下,如果没有单测基础就会一头雾水,那此时大家就可以看我上一篇单测基础文章点击跳转了。
如果你已具备单测基础知识了,那就跟着本文继续吧:
使用AI IDE生成单测
当下,辅助编程工具百花齐放,Cursor、github coplit、TREA等等,本文以Cursor为例进行演示
在Cursor的设置里,开启codebase indexing,这能让 Cursor 更好地理解整个仓库,也能让 Cursor 有机会学习存量单测代码的写法;
在Cursor的设置里,开启 yolo 模式(要求 0.43 以上版本),这是一个强大的 AI Agent,能自行调用各类工具(eslint/ts/vitest 等)判断生成代码的合法性;
在项目根目录下创建一个.cursorrules文件,用于定义规则(假设你正在开发一个React项目,你可以在.cursorrules文件中指定使用React作为技术栈,定义代码缩进为2个空格,变量命名使用驼峰命名法等。这样,Cursor AI在生成代码时就会遵循这些规则,生成更符合项目需求的代码);
模型切换为
claude
;打开需要生成单测的目标文件后,
ctrl + i
打开 composer 面板,输入 prompt:为 @xxx 文件生成单测 // 或者 为 @xxx 包生成单测 为 @xxx 目录生成单测
大多简单场景在这里可以一遍过,但项目复杂时就需要人工介入了
最佳实践
- 少量多次通过git commit暂存代码,方便每次生成单测后对照回滚
- 在单测配置文件中规定或者每次运行单测时初期让范围覆盖的尽可能小
- 单测出现问题时,可以使用terminal 右上角的
Add to Composer
按钮,让 LLM 继续帮你解决问题 - 使用合适的模型与工具,Cursor + Claude这个组合目前还是很能打的
- mock 所有上下文,单元测试的核心要素在于“单元”,测试目标应聚焦在特定模块/函数上,不应该关注模块之间的交互效果(这方面可由集成测试完成),因此需要营造一个“孤立”的环境,mock 掉所有可能影响测试结果的外部要素,将重点聚焦在单个模块的内在逻辑上。