企业代码安全无忧!基于私有DeepSeek的IntelliJ IDEA单元测试插件开发实战
插件要实现的功能也很简单,在java类编辑页面,点击鼠标右键,弹出菜单选项“Generate Test with DeepSeek”,点击“Generate Test with DeepSeek”菜单项会判断当前java类的test目录对应package路径下是否存在对应类的单元测试类文件,若存在弹窗提示是否重新生成并覆盖原文件,选择是则调用DeepSeek大模型生成全路径覆盖单元测试。以上就是单
当前各大主流IDEA大模型插件、AI代码编辑器都不支持配置私有DeepSeek服务,企业也担心自己的代码资源会外泄。所以,基于这个想法编写了一个IDEA大模型插件,可配置企业私有DeepSeek服务,初版功能仅支持单元测试生成。
插件功能描述
插件要实现的功能也很简单,在java类编辑页面,点击鼠标右键,弹出菜单选项“Generate Test with DeepSeek”,点击“Generate Test with DeepSeek”菜单项会判断当前java类的test目录对应package路径下是否存在对应类的单元测试类文件,若存在弹窗提示是否重新生成并覆盖原文件,选择是则调用DeepSeek大模型生成全路径覆盖单元测试。
另一个功能是DeepSeek大模型的参数配置,可配置大模型URL、API key、支持的模型、最大tokens。
开发环境配置
Intellij IDEA插件开发需要配置开发环境,这部分内容在《Intellij IDEA插件开发-开发环境搭建》一文已详细介绍,如果有疑问可回看。
核心代码编写
有了开发环境,接下来就是代码编写。代码编写分为三部分,分别是UI注册与配置、UI交互实现、DeepSeek对接。
UI注册与配置
首先,我们要实现鼠标右键点击后在弹出的菜单中增加“Generate Test with DeepSeek”选项,这个主要在plugin.xml中注册插件动作,这里用到了在《Intellij IDEA插件开发-核心概念介绍》中介绍的Action,如果不了解可以回看此文对应章节,对应的代码也很简单,详细代码和注释放到下方。
xml中主要有两块,一个是定义“Generate Test with DeepSeek”菜单项的动作,也就是点击它时会执行的代码,即GenerateTestAction.java这个类;另外就是这个“Generate Test with DeepSeek”菜单项的显示文字和摆放位置,显示文字就是text的属性值,摆放位置就是添加到编辑器右键菜单的末尾,最终的效果如下图所示。
其次是DeepSeek大模型配置界面,通过插件扩展点实现,即extensions,这个在《Intellij IDEA插件开发-核心概念介绍》中也有介绍过。
在扩展点中注册了一个applicationService和一个applicationConfigurable,applicationService用于存储DeepSeek设置状态,具体实现代码在AISettingsState.java中;applicationConfigurable用于注册设置界面配置项,具体代码在AISettingsConfigurable.java中,在这个类中定义了有哪些配置项以及配置项的布局,最终的效果如下图。
UI交互实现
首先是鼠标右键“Generate Test with DeepSeek”菜单项的动作实现代码GenerateTestAction.java,它继承AnAction抽象类,实现了actionPerformed方法,当用户触发生成单元测试操作时,此方法会被调用。代码的逻辑也比较简单,获取当前java类文件源码、当前java类的package、当前java类的类名,定义测试类名称为“当前java类的类名+Test”、测试类存放路径,检查测试类文件是否已存在,若已存在弹窗提示。接着启用后台线程,调用大模型服务接口生成单元测试类,核心代码如下所示。
还有就是DeepSeek大模型配置界面代码,分别在AISettingsState.java和AISettingsConfigurable.java中。在AISettingsState.java中主要定义了大模型的配置参数,如URL、API key、model、maxTokens,核心代码如下。
在AISettingsConfigurable.java中定义了大模型的配置参数以什么样的控件、什么位置展示在界面上,如URL使用JTextField控件实现可编辑输入框,API Key使用JPasswordField控件实现输入明文不可见,model使用JComboBox控件实现下拉可选择,maxTokens使用JSpinner控件实现数字可上下加减,核心代码如下。
DeepSeek对接
有了UI界面和交互代码,接下来就是对接大模型DeepSeek实现单元测试类生成。为了后续对接更多大模型提供扩展,预置AIService接口,在接口中定义generateTestStream方法,用于以流式方式生成单元测试代码,同时预设单元测试类生成提示词模板getPromptTemplate方法,核心代码如下。
有了AIService接口定义,编写DeepSeekApiService.java实现AIService接口。在DeepSeekApiService类中主要通过okhttp3实现API对接通信,根据官网请求参数设置model、messages、max_tokens等参数,并以流式对接响应,核心代码如下。
总结
以上就是基于DeepSeek实现的单元测试类生成插件,过程中有很多细节要处理,例如移除DeepSeek代码中的Markdown标记和多余的空白字符、检查并添加单元测试所需的所有必要导入语句等等,实现不是很复杂,只是要不断摸索处理。
以上就是单元测试类生成插件的核心内容,和很多成熟插件、AI编辑器比起来很鸡肋,可用于学习插件开发和大模型对接。
欢迎感兴趣的小伙伴留言探讨AI在研发提效方面的落地方案和经验。
更多推荐
所有评论(0)