golang自动化生成单元测试

435 阅读2分钟

这里讨论两种方案,一种是不使用大模型的方案,另一种是使用大模型的方案。

首先来看不使用大模型的方案。

基于模板的单元测试自动生成

主要工具是gotests

模板链接在这里

可以自行修改模板,以满足自己团队的需求,比如你可能需要用到monkey,就自行在模板里增加相应的代码就行,或者引入goconvey

在使用的过程中,可能会发现,我们要做到Table Driven Test,需要有一些真实的数据(mock数据的时候要用到的),特别是当一个结构体较为复杂的时候,应该如何构造这些数据呢?

一个简单的方法是,在测试环境跑一下代码,直接从测试环境里dump出来数据是不是就可以了。

如果你写过python代码,知道pprint,那你一定希望在golang里也能优雅的打印一个结构体,好在有专门的包做了这个事情,叫做pp,注意在使用的时候,如果结构体是通过protobuf生成的,那将会出现很多很多你不需要关心的字段,类似于这样

image.png 此时,你需要将exportedOnly属性设置为true,这样就不会展示这些并不关心的字段了。

基于大模型的单元测试自动生成

使用通义灵码

使用链接,根据自己使用的IDE来选择安装对应版本。 这里展示一下VSCode当中的使用方式

image.png

用鼠标框选一段代码,点击鼠标右键,选择【通义灵码】->【生成单元测试】即可

使用Continue插件结合多种大模型

如果自己有GPU服务器部署了大模型,或者使用其他平台提供的api,也可以结合到自己的代码编写工作当中。

这里推荐使用Continue插件,这里有链接,配置好之后,跟通义灵码的使用体验差不多,也是鼠标框选好代码函数,右键,选择【Continue】-> 【Add Highlighted Code to Context】将会在左侧打开一个对话窗口,这里需要手动输入一句“编写单元测试”,之后,Continue将会为我们写出来单元测试代码,或者也可以就这段高亮的代码展开对话提问。

image.png