我们项目有一个历史遗留问题:核心支付模块的单元测试覆盖率只有40%,新需求上线全靠手工回归,测试同事每次发版都提心吊胆。上个月我试了用AI批量生成单元测试,一个月下来覆盖率提到了85%,测试同事反馈"比人写的还规矩"。这篇文章记录一下我的完整做法和踩过的坑。
覆盖率低的根本原因不是"不想写",而是"写不动":
我把要补测的类和方法贴给AI,让它先输出一份"方法说明":每个方法的输入、输出、依赖、边界条件、可能抛出的异常。这一步很关键——先让AI解释一遍,它后续生成的测试才有针对性,而不是瞎猜。
提示词的大致思路是:
为以下方法生成JUnit单元测试:覆盖正常路径、异常路径、边界值(空值、极值、非法参数)、依赖失败(mock抛异常)四类场景;使用Mockito mock所有外部依赖;每个测试给出简短的场景注释。
AI生成的测试有个明显优点:边界条件比人想得全。比如金额计算方法的0.00、负数、超大数、精度边界,它全都覆盖了,这正好补上了我们最弱的一环。
AI生成的测试我不会直接合入,而是过三道检查:
一个月的数据:核心模块覆盖率从40%升到85%,新生成的测试数量约600个,其中人工修改率约20%(主要是业务规则理解偏差和边界修正)。最有说服力的是:上线前测试同事用变异测试工具跑了一遍,我们补的测试"杀掉"了87%的变异体,说明这些测试是真的能抓bug,不是充数的。
我的心得是:AI写测试的定位是"高效的生产力工具",不是"免检的测试工程师"。它把最耗时的手工劳动(读代码、写样板、想边界)自动化了,但业务规则的正确性、测试的有效性,必须由人把关。如果你也在为存量代码的覆盖率头疼,强烈建议用AI从"老模块+高价值方法"开始补,收益立竿见影。