如何使用通义灵码完成PHP单元测试 - AI辅助开发教程
一、引言
在软件开发过程中,测试是至关重要的一环。然而,在传统开发中,测试常常被忽略或草草处理,很多时候并非开发人员故意为之,而是缺乏相应的测试思路和方法,不知道如何设计测试用例。随着 AI 技术的飞速发展,如今 AI 已经能够辅助我们进行单元测试。本文将介绍如何使用通义灵码来辅助进行 PHP 的单元测试,帮助开发人员更高效地完成测试工作,提升代码质量和项目的稳定性。
二、通义灵码简介
通义灵码是由阿里云技术团队精心打造的智能编码助手。它基于强大的通义大模型,为开发人员提供以下实用功能:
-
代码续写和优化:能够根据现有代码上下文,智能生成行级或函数级的代码建议,帮助开发人员快速完成代码编写,并对代码进行优化,提高代码质量和执行效率。
-
自然语言描述生成代码:开发人员可以通过自然语言描述需求,通义灵码能够将其转化为相应的代码,大大简化了代码编写过程,尤其适用于复杂功能的实现。
-
注释生成和代码解释:自动为代码添加详细注释,方便开发人员及团队成员更好地理解代码逻辑和功能;同时,能够对代码进行详细解释,包括数据库表结构分析、SQL 查询过程解析等,有助于代码的维护和优化。
-
单元测试生成:根据代码自动生成单元测试用例,确保代码的可靠性和稳定性,提高测试效率。
-
研发智能问答:作为基础和核心功能,开发人员可以通过与通义灵码的问答对话,获取所需的技术支持和解决方案,就像拥有一位智能的编程助手。
-
代码问题修复:能够识别代码中的潜在问题,并提供修复建议,帮助开发人员及时解决代码错误和漏洞。
通义灵码官网:https://tongyi.aliyun.com/lingma/
通义灵码支持:JetBrains IDEs、Visual Studio Code、Visual Studio,及远程开发场景(Remote SSH、Docker、WSL、Web IDE),安装后登录账号即可开始使用。
PHP的单元测试一般使用PHPunit进行,PHP开发可以用的工具很多,但本文选择使用PHPstorm,因为像PHPstorm这种重量级的IDE提供的测试支持会更好点。
三、环境配置
本文以 PHPStorm 为例,介绍通义灵码的安装方法,因为像 PHPStorm 这种重量级的 IDE 提供的测试支持更为完善。
PHPstorm的插件商店提供了通义灵码的插件,我们可以直接在插件商店下载:
-
点击顶部菜单栏的 File -> Settings(在 macOS 上为 PHPStorm -> Preferences)。
-
在设置窗口的左侧菜单中选择 Plugins,然后点击 Marketplace。
-
在搜索框中输入 “通义灵码”,找到插件后点击 Install 按钮进行安装。
- 安装完成后,重启 PHPStorm 以完成插件的加载。
PHPstorm 的安装方式和 IDEA 的是一样的,可以参考IntelliJ IDEA 中安装和使用通义灵码 AI 编程助手教程。
四、登录操作
重启 PHPstorm 后,在右侧工具栏会看到 通义灵码 的图标。点击图标进入插件界面。
注意:首次使用时,需要点击登录按钮,浏览器会自动打开阿里云登录页面,完成登录后即可返回 PHPStorm 使用通义灵码。
五、推荐 AI 选择
通义灵码提供了多个 AI 大模型供调用,但在单元测试生成方面,qwq-plus 生成的测试用例会更详细。可以在智能问答选项上选择该模型,后续的所有功能都会基于该模型进行生成。
六、功能演示
(一)单个函数的单元测试生成
单元测试是最小的测试单位,通常针对函数或方法进行。使用通义灵码进行单元测试十分简单,只需选择已写好的代码,右键选择通义灵码的生成单元测试功能,即可自动生成单元测试代码。
之所以要选择使用qwq-plus,是因为该模型生成的测试文档很详细,包含了被测函数的分析
函数的分支分析
和测试用例的分析
同时提供了mock需求分析,最后并根据该方案给出了测试代码
对于开发者而言,只需要把生成的测试代码复制到专门的测试文件中,就可以使用PHPunit开始进行测试了(因为PHP的单元测试一般使用PHPunit,代码生成的刚好也是PHPunit,我们需要的也是PHPunit,这点刚好不需要进行调整,如果是Python那种有多个测试框架可供选择的,可以在智能问答中让AI重新生成对应测试框架的代码)。
对类的单元测试生成
单元测试也可以对整个类进行测试,实际上在测试管理中,一般会按类或者文件进行分文件管理,比如在Java中,一个类对应一个文件,一个类也对应一个测试文件,PHP也可以这么进行管理。
与之前单个函数的单元测试相同,我们选中整个类的代码,然后右键选择通义灵码的生成单元测试
这次我们生成的单元测试是针对整个类的了,它会对每个方法进行分析并生成对应的测试用例。
注意,在项目开发中,应将测试文件单独存放在一个测试目录,例如 Laravel 框架生成的项目结构中就有专门用于放置测试文件的 tests 文件夹,可以将整个类的测试代码存放在这里。
(三)使用智能问答完成测试驱动开发
在我们之前的功能介绍中,我们是先写完代码,再进行测试,但在项目工程管理中有一种开发方式叫测试驱动开发,这种开发方式是先写单元测试代码,最后再写功能。在写测试代码的时候应该把需求考虑清楚,根据需求进行测试代码的设计。
例如,我们想要完成一个树的先序遍历功能,我们需要知道函数的输入有哪些可能,以这个案例为例,则是有哪些树的情况,例如下所示
然后根据输入情况,判断会有哪些结果
我们还需要考虑一些极端条件
最后,根据这些结果,写出对应的测试代码
到此测试设计部分就完成了,现在开发部分只需要设计出能够通过这些测试的代码即可!
是的,你可以看到上面给的流程,其实都是AI辅助生成的,我们只需要在智能问答中提出我们需要的函数的功能,让AI生成对应的测试代码即可
我们之前提到过,在某个语言存在多个测试框架情况下,可能生成的测试代码会与我们需要的不同的情况。比如我在这次提问的时候,AI给我的是Junit的单元测试代码(这是Java的单元测试框架),我们可以通过重新提问,让AI生成新的更符合我们要求的答案
(四)使用 AI 程序员帮助进行测试
通义灵码提供了 AI 程序员功能,可以将其视为一个虚拟的程序员。
在这里,也可以将其作为一个测试程序员使用,直接让 AI 帮助测试某个类,并生成对应的测试文件和测试方案。
七、总结与展望
通义灵码作为一款智能编码助手,为 PHP 单元测试提供了强大的支持。从单个函数到整个类的单元测试生成,再到智能问答辅助测试驱动开发,以及 AI 程序员功能,它几乎涵盖了测试过程中的各个方面。通过本文的介绍,希望你能更好地理解和使用通义灵码,提升测试效率和代码质量,确保项目的稳定性和可靠性。随着 AI 技术的不断发展,相信通义灵码将在未来的软件开发测试领域发挥更加重要的作用。
相关文章:
如何使用通义灵码完成PHP单元测试 - AI辅助开发教程
一、引言 在软件开发过程中,测试是至关重要的一环。然而,在传统开发中,测试常常被忽略或草草处理,很多时候并非开发人员故意为之,而是缺乏相应的测试思路和方法,不知道如何设计测试用例。随着 AI 技术的飞…...
使用 nano 文本编辑器修改 ~/.bashrc 文件与一些快捷键
目录 使用 nano 编辑器保存并关闭文件使用 sed 命令直接修改文件验证更改 如果你正在使用 nano 文本编辑器来修改 ~/.bashrc 文件,以下是保存并关闭文件的具体步骤: 使用 nano 编辑器保存并关闭文件 打开 ~/.bashrc 文件 在终端中运行以下命令…...
计算机组成原理——CPU与存储器连接例题
计算机组成原理——CPU与存储器连接例题 设CPU共有16根地址线和8根数据线,并用(MREQ) ̅作为访存控制信号(低电平有效),(WR) ̅作为读/写命令信号(高电平读,低电平写)。现有下列存储芯片&#…...
SQL 外键(Foreign Key)详细讲解
1. 什么是外键? 定义:外键是数据库表中的一列(或一组列),用于建立两个表之间的关联关系。外键的值必须匹配另一个表的主键(Primary Key)或唯一约束(Unique Con…...
B3647 【模板】Floyd
题目链接:点击进入 题目 思路 代码 #include <bits/stdc.h> #define inf 0x3f3f3f3f using namespace std; const int maxn 1e6 10;int n,m,g[110][5000];int main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n>>m;memse…...
配置镜像端口和观察接口
top: 在G0/0/2上抓包通过其他端口ping pc4 可以看到 Wireshark 抓包没有任何反应,做个镜像端口并配置(观察接口和镜像接口) observe-port interface g0/0/2 #命令配置观察端口mirror to observe-port both …...
爬虫解决debbugger之替换文件
鼠鼠上次做一个网站的时候,遇到的debbugger问题,是通过打断点然后编辑断点解决的,现在鼠鼠又学会了一个新的技能 首先需要大家下载一个reres的插件,这里最好用谷歌浏览器 先请大家看看案例国家水质自动综合监管平台 这里我们只…...
erlang的安装-linux
1:解压 tar -zxvf 安装包 2:进入解压的目录执行: ./configure --prefix/usr/local/erlang --with-ssl --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe --without-javac 3:编译安装: m…...
Android Coil 3默认P3色域图加载/显示不出来
Android Coil 3默认P3色域图加载/显示不出来 解决,需要在Androidmanifest.xml使用Coil 3的activity配置属性: <activityandroid:colorMode"wideColorGamut"...</activity>...
【LaTeX】安装
Register - Overleaf, 在线LaTeX编辑器 注册Overleaf 安装 Latex2022 安装教程(附安装资源)_tex2022安装教程-CSDN博客 注:先安装 texlive,再安装TexStudio \documentclass{article} % 这里是导言区 \begin{document}Hello, wor…...
【2025年认证杯数学中国数学建模网络挑战赛】A题 解题建模过程与模型代码(基于matlab)
目录 【2025年认证杯数学建模挑战赛】A题解题建模过程与模型代码(基于matlab)A题 小行星轨迹预测解题思路第一问模型与求解第二问模型与求解 【2025年认证杯数学建模挑战赛】A题 解题建模过程与模型代码(基于matlab) A题 小行星轨…...
【KWDB 创作者计划】KWDB 数据库全维度解析手册
——从原理到实践,构建下一代数据基础设施 第一章:KWDB 设计哲学与技术全景 1.1 为什么需要 KWDB? 在数据爆炸与业务场景碎片化的今天,传统数据库面临三大挑战:扩展性瓶颈(单机性能天花板ÿ…...
低代码开发能否取代后端?深度剖析与展望-优雅草卓伊凡
低代码开发能否取代后端?深度剖析与展望-优雅草卓伊凡 在科技迅猛发展的当下,软件开发领域新思潮与新技术不断涌现,引发行业内外热烈探讨。近日,笔者收到这样一个颇具争议的问题:“低代码开发能取代后端吗?…...
LeetCode hot 100—最长回文子串
题目 给你一个字符串 s,找到 s 中最长的 回文 子串。 示例 示例 1: 输入:s "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。示例 2: 输入:s "cb…...
蓝桥杯知识总结
文章目录 1.常用的数学方法2.大小写转换3.数组和集合排序数组排序集合排序 4.控制小数位数5.栈6.队列7.字符串相关方法8.十进制转n进制模板字符转为十进制某进制转化为十进制 9.前缀和10.差分11.离散化12.双指针13.二分14.枚举模板组合型枚举模板排列型枚举模板 15.搜索算法BFS…...
leetcode:2839. 判断通过操作能否让字符串相等 I(python3解法)
难度:简单 给你两个字符串 s1 和 s2 ,两个字符串的长度都为 4 ,且只包含 小写 英文字母。 你可以对两个字符串中的 任意一个 执行以下操作 任意 次: 选择两个下标 i 和 j 且满足 j - i 2 ,然后 交换 这个字符串中两个…...
Python Lambda表达式详解
Python Lambda表达式详解 1. Lambda是什么? Lambda是Python中用于创建匿名函数(没有名字的函数)的关键字,核心特点是简洁。它适用于需要临时定义简单函数的场景,或直接作为参数传递给高阶函数(如map()、f…...
Matlab 平衡车的建模与控制
1、内容简介 Matlab 189-平衡车的建模与控制 可以交流、咨询、答疑 2、内容说明 略 平衡车的建模与控制 选择一款平衡车(如:小米九号平衡车等),并估计平衡车的关键参数。完成以下工作: 1. 建立平衡车模型…...
KWDB创作者计划—KWDB关系库与时序库混搭
📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验 Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯…...
Android studio2024的第一个安卓项目
目录 一、创建项目 1、创建Empty Views Activity类型项目 2、Android项目结构解析 manifests 目录: Gradle Scripts目录 3、创建安卓应用 二、测试 1、模拟器测试效果 2、连接真机,然后直接选择真机运行即可(点击Run或Shift F10运行…...
航电系统之障碍物监测技术篇
航电系统的障碍物监测技术是保障飞行安全、提升飞行效率的核心技术之一,尤其在复杂环境和低空飞行中发挥着关键作用。以下从技术原理、传感器类型、数据处理与应用等方面进行系统介绍: 一、技术原理 航电系统的障碍物监测技术通过多传感器融合和智能算法…...
网站DDoS防护方案——构建企业级安全屏障的关键路径
本文深度解析DDoS攻击最新演变趋势与防御技术体系,通过攻击特征图谱、云原生防护架构、混合防御模型等维度,揭示企业级网站防护方案的设计逻辑。结合2023年金融行业千万级QPS攻击事件,引用Gartner最新防御技术成熟度曲线,给出可落…...
Linux系统使用lshw生成硬件报告方法
使用 lshw 生成 HTML 硬件报告指南 一、工具简介 lshw(List Hardware)是 Linux 系统下用于检测并报告硬件详细信息的命令行工具,支持输出多种格式(文本、HTML、XML 等)。 核心功能: 显示 CPU、内存、磁盘、PCI/USB 设备等完整硬件信息生成结构化报告,便于存档或分析支…...
力扣 905 按奇偶排序数组:双指针法的优雅实现
目录 问题背景 题目解析 解题思路 暴力解法 双指针法 代码实现 代码解析 算法效率 实际应用场景 总结 问题背景 在编程的世界里,数组排序问题一直是经典中的经典。今天我们要解决的是一个有趣的变种:按奇偶排序数组。题目要求我们将一个整数数…...
LeetCode hot 100—子集
题目 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 示例 1: 输入:nums [1,2,3] 输出:[[],[1],[2…...
BERT - BertTokenizer, BertModel API模型微调
本节代码将展示如何在预训练的BERT模型基础上进行微调,以适应特定的下游任务。 ⭐学习建议直接看文章最后的需复现代码,不懂得地方再回看 微调是自然语言处理中常见的方法,通过在预训练模型的基础上添加额外的层,并在特定任务的…...
通过代码获取接口文档工具
通过代码获取接口文档工具 介绍使用到的技术使用说明核心源码演示截图工具源码 介绍 1.通过前后端代码来生成规格化的接口文档 2.支持拖拽上传或点击选择文件,可以一次选择多个文件或选择文件夹 3.用户选择前后端代码,工具调用GPT解析,得到规…...
不再卡顿!如何根据使用需求挑选合适的电脑内存?
电脑运行内存多大合适?在选购或升级电脑时,除了关注处理器的速度、硬盘的容量之外,内存(RAM)的大小也是决定电脑性能的一个重要因素。但究竟电脑运行内存多大才合适呢?这篇文章将帮助你理解不同使用场景下适…...
leetcode589 N叉树的前序遍历
前序遍历的顺序是:根节点 -> 子节点1 -> 子节点2 -> ... -> 子节点N 递归: class Solution { private:void traverse(Node* cur, vector<int>& res){if(cur NULL) return;res.push_back(cur->val);for(Node* child: cur->…...
游戏引擎学习第216天
回顾并为当天做准备 你可以看到,游戏现在正在运行。如果我没记错的话,我们之前把调试系统关闭了,留下一个状态,让任何想要在这段时间内进行实验的人可以自由操作,因为我们还没有完全完成这个系统。所以这样做是为了确…...
JavaSE反射机制干货
1.反射(Relection) 理解 定义:程序运行状态,动态地获取程序信息及调用程序功能即为java反射机制 2.获取class对象 掌握 2.1 Java代码的3个阶段 Java代码在计算机中经历的三个阶段:Source源代码阶段-Class类对象阶段-Runt…...
[特殊字符] 第十一讲 | 空间回归模型实战:SAR / SEM / GWR逐个击破
📘 专栏:科研统计方法实战分享 | 地学/农学人的数据分析工具箱 ✍️ 作者:平常心0715 🔑 本讲关键词:空间滞后模型(SAR)、空间误差模型(SEM)、地理加权回归(G…...
AI前沿周报:2025年3月技术深度解析
以下是基于2024-2025年AI技术前沿动态的深度技术周报示例,结合行业最新突破与研究进展,突出技术原理与应用场景分析: AI前沿周报:2025年3月技术深度解析 时间范围:2025年3月1日-3月31日 本期焦点:模型透明…...
aidigu开源微博项目程序,PHP开发的开源微博系统,自媒体个人创业、网盘推广首先
一、软件介绍 文末提供程序和源码下载学习 PHP开发的开源微博系统,采用PHP MySQL开发,框架采用ThinkPHP5.1,用户登录后拥有专属ID,支持表情、关注用户,网盘分享等功能,支持图片上传,视频上传,网盘存储分享…...
Tabnet介绍(Decision Manifolds)和PyTorch TabNet之TabNetRegressor
Tabnet介绍(Decision Manifolds)和PyTorch TabNet之TabNetRegressor Decision ManifoldsTabNet1.核心思想2. 架构组成3. 工作流程4. 优点PyTorch TabNetTabNetRegressor参数1. 模型相关参数`n_d``n_a``n_steps``gamma``cat_idxs``cat_dims``cat_emb_dim`2. 训练相关参数`opti…...
格瑞普Tattu正式成为2025年中国无人机竞速联赛官方赞助商!
格瑞普Tattu正式成为2025年中国无人机竞速联赛官方赞助商! 为飞手赋能,为赛事护航! Tattu是深圳市格瑞普电池有限公司(Grepow)旗下的子品牌之一,专注为无人机、FPV和模型爱好者提供专业可靠的电池和充电器等一站式电源解决方案。凭借卓越的放电性能、稳…...
PySide6 监测设备变更事件
在PySide6中监听系统事件,判断是否有串口设备插拔,进而当串口状态变更时,实现列表数据实时更新。 在Qt中,可以使用 nativeEvent 接口来完成这一操作: [virtual protected] bool QWidget::nativeEvent(const QByteArray…...
嵌入式系统的历史与发展
目录 引言 一、嵌入式系统的早期萌芽 1、首个现代嵌入式系统 2、早期未成形嵌入式系统的应用 二、以单片机为主的初级阶段 1、工业领域应用 2、大型家电领域应用 三、处理器升级与多样化应用阶段 1、数字化电子化设备涌现 (1)智能仪表…...
mysql调试记录
ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY password; 该命令在调试python使用pymysql连接数据库出现错误时, 报错为pymysql.err.OperationalError: (1045, "Access denied for user rootlocalhost (using password: NO)") m…...
【后端开发】Spring MVC阶段总结
文章目录 快捷引入依赖lombok的使用Lombok依赖Lombok使用Lombok注解 三层架构分层的目的MVC与分层的区别三层架构分层的好处 企业命名规范常见命名命名风格介绍大驼峰风格小驼峰风格包名 常见注解Cookie与Session 快捷引入依赖 这个方法可以快捷引入依赖,但是引入依…...
netty-socketio + springboot 消息推送服务
netty-socketio springboot 消息推送服务 后端1. 目录结构:代码pom文件:application.yml:SocketIOConfig:PushMessage:ISocketIOServiceSocketIOServiceImpl:pushMessageController:启动类&…...
基于 JavaWeb 的 SSM 在线视频教育系统设计和实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...
同时打开多个Microchip MPLAB X IDE
0.引用 Microchip 32位MCU CAN驱动图文教程-附源码 - 哔哩哔哩 https://bbs.21ic.com/icview-3391426-1-1.html https://bbs.21ic.com/icview-3393632-1-1.html 1.前言 工作中接触到使用Microchip 的 MPLAB X IDE 开发工具,使用的MCU是Microchip SAMD21J18A MCU…...
dify 500错误
问题 升级到1.2.0 后所有页面接口均报错500, 环境: docker 本地部署 version:1.2.0 解决办法 1.首先关闭服务 docker compose down2.找到docker-compose.yaml里的plugin_daemon,参照下面修改参数 plugin_daemon:environment:PLUGIN_MAX_EXECUTION…...
WPF设计标准学习记录26
画刷名称功能说明SolidColorBrush使用单一的连续颜色填充区域LinearGradientBrush使用线性渐变绘制区域。RadialGradientBrush使用径向渐变绘制区域。 焦点定义渐变的开始,而圆定义渐变的终点。ImageBrush使用图像绘制区域。VisualBrush使用一个视图绘制区域。BitmapCacheBrus…...
cin,cin.get(),getchar(),getline(),cin.get line()异同点
文章目录 1.cin2.cin.get()3.getchar()4.cin.getline()5.getline() 1.cin (1)cin>>等价于cin.operator>>(),即调用成员函数operator>>()进行读取数据。 (2)当cin>>从缓冲区中读取数据时&…...
7# 5多线-7 不会停
7# 5多线-7 不会停 分析,明显线接错了,打自动时也能手动启停,打手动无法启停,这时远程只能启ka3,无法启ka4。排查手自转换2上没接线,接到8上了(13和12接错了,也就是sac的5和6接错了)…...
基于混合编码器和边缘引导的拉普拉斯金字塔网络用于遥感变化检测
Laplacian Pyramid Network With HybridEncoder and Edge Guidance for RemoteSensing Change Detection 0、摘要 遥感变化检测(CD)是观测和分析动态土地覆盖变化的一项关键任务。许多基于深度学习的CD方法表现出强大的性能,但它们的有效性…...
机器学习 从入门到精通 day_04
1. 决策树-分类 1.1 概念 1. 决策节点 通过条件判断而进行分支选择的节点。如:将某个样本中的属性值(特征值)与决策节点上的值进行比较,从而判断它的流向。 2. 叶子节点 没有子节点的节点,表示最终的决策结果。 3. 决策树的…...
CLAHE算法介绍
限制对比度自适应直方图增强 CLAHE 算法介绍 1. CLAHE算法框图2.直方图clip及重分配2.1 opencv自带2.2 scikit-image2.3 结果对比2.4 clip limit的性质3.插值参考文献上图来自 K. Zuiderveld: Contrast Limited Adaptive Histogram Equalization。 图中可以看到各种直方图均衡的…...