如何使用通义灵码完成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 技术的飞…...
pig 权限管理开源项目学习
pig 源码 https://github.com/pig-mesh/pig 文档在其中,前端在文档中,官方视频教学也在文档中有。 第一次搭建,建议直接去看单体视频,照着做即可,需 mysql,redis 基础。 文章目录 项目结构Maven 多模块项…...
设计模式:依赖倒转原则 - 依赖抽象,解耦具体实现
一、为什么用依赖倒转原则? 在软件开发中,类与类之间的依赖关系是架构设计中的关键。如果依赖过于紧密,系统的扩展性和维护性将受到限制。为了应对这一挑战,依赖倒转原则(Dependency Inversion Principle,…...
探秘Transformer系列之(26)--- KV Cache优化 之 PD分离or合并
探秘Transformer系列之(26)— KV Cache优化 之 PD分离or合并 文章目录 探秘Transformer系列之(26)--- KV Cache优化 之 PD分离or合并0x00 概述0x01 背景知识1.1 自回归&迭代1.2 KV Cache 0x02 静态批处理2.1 调度策略2.2 问题…...
鸿蒙5.0 非桌面页面,设备来电后挂断,自动返回桌面
1.背景 其实在Android上面打开一个应用,然后设备来电后挂断应该是返回到前面打开的这个应用的,但是在鸿蒙里面现象是直接返回桌面,设计如此 2.分析 这个分析需要前置知识,鸿蒙的任务栈页面栈,具体参考如下链接: zh-cn/application-dev/application-models/page-missio…...
C++语言程序设计——02 变量与数据类型
目录 一、变量与数据类型(一)变量的数据类型(二)变量命名规则(三)定义变量(四)变量赋值(五)查看数据类型 二、ASCII码三、进制表示与转换(一&…...
Model Context Protocol (MCP) - 尝试创建和测试一下MCP Server
1.简单介绍 MCP是Model Context Protocol的缩写,是Anthropic开源的一个标准协议。MCP使得大语言模型可以和外部的数据源,工具进行集成。当前MCP在社区逐渐地流行起来了。同时official C# SDK(仓库是csharp-sdk) 也在不断更新中,目前最新版本…...
十四种逻辑器件综合对比——《器件手册--逻辑器件》
目录 逻辑器件 简述 按功能分类 按工艺分类 按电平分类 特殊功能逻辑器件 应用领域 详尽阐述 1 逻辑门 一、基本概念 二、主要类型 三、实现方式 四、应用领域 2 反相器 工作原理 基本功能 主要应用 常见类型 特点 未来发展趋势 3 锁存器 基本概念 工作原理 主要类型…...
将已有 SVN 服务打包成 Docker 镜像的详细步骤
将已有 SVN 服务打包成 Docker 镜像的详细步骤 一、服务器环境准备 在开始将 SVN 服务打包成 Docker 镜像之前,我们需要确保目标服务器的环境满足一定条件。 首先要确保目标服务器已安装 Docker。同时服务器可以连接互联网,可以通过以下简单命令来验证…...
python文件打包无法导入ultralytics模块
💥打包的 .exe 闪退了?别慌!教你逐步排查 PyInstaller 打包的所有错误! 🛠 运行 .exe 查看报错信息✅ 正确姿势: ⚠ importlib 动态导入导致打包失败❓什么是动态导入?✅ 解决方式: …...
AMBA-CHI协议详解(二十六)
AMBA-CHI协议详解(一)- Introduction AMBA-CHI协议详解(二)- Channel fields / Read transactions AMBA-CHI协议详解(三)- Write transactions AMBA-CHI协议详解(四)- Other transactions AMBA-CHI协议详解(五)- Transaction identifier fields AMBA-CHI协议详解(六…...
Go小技巧易错点100例(二十六)
本期分享: 1. string转[]byte是否会发生内存拷贝 2. Go程序获取文件的哈希值 正文: string转[]byte是否会发生内存拷贝 在Go语言中,字符串转换为字节数组([]byte)确实会发生内存拷贝。这是因为在Go中,字…...
FPGA_BD Block Design学习(一)
PS端开发流程详细步骤 1.第一步:打开Vivado软件,创建或打开一个工程。 2.第二步:在Block Design中添加arm核心,并将其配置为IP核。 3.第三步:配置arm核心的外设信息,如DDR接口、时钟频率、UART接口等。 …...
ubuntu20.04+qt5.12.8安装serialbus
先从官网https://download.qt.io/archive/qt/5.12/5.12.8/submodules/ 下载 qtserialbus-everywhere-src-5.12.8.tar.xz 有需要其他版本的点击返回上一级自行寻找对应版本。 也可从 https://download.csdn.net/download/zhouhui1982/90595810 下载 在终端中依次输入以下命令…...
银河麒麟V10 Ollama+ShellGPT打造Shell AI助手——筑梦之路
环境说明 1. 操作系统版本: 银河麒麟V10 2. CPU架构:X86 3. Python版本:3.12.9 4. 大模型:mistral:7b-instruct 准备工作 1. 编译安装python 3.12 # 下载python 源码wget https://www.python.org/ftp/python/3.12.9/Python-3.12.9.tg…...
python求π近似值
【问题描述】用公式π/4≈1-1/31/5-1/7..1/(2*N-1).求圆周率PI的近似值。 从键盘输入一个整数N值,利用上述公式计算出π的近似值,然后输出π值,保留小数后8位。 【样例输入】1000 【样例输出】3.14059265 def countpi(N):p0040nowid0for i i…...
基于 Spring Boot + Vue 的 [业务场景] 管理系统设计与实现
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...
如何查看自己抖音的IP属地?详细教程+常见问题解答
在当今互联网时代,IP属地信息已成为各大社交平台(如抖音、微博、快手等)展示用户真实网络位置的重要功能。无论是出于隐私保护、账号安全,还是单纯好奇自己的IP归属地,了解如何查看抖音IP属地都很有必要。 本文将详细介…...
⑪数据中心网络M-LAG实战
一、DeviceA-M-LAG-Mater配置 1、M-LAG 系统配置。 # m-lag mad exclude interface GigabitEthernet1/0/7 m-lag mad exclude interface Vlan-interface100 m-lag mad exclude interface Vlan-interface101 m-lag system-mac 0002-0002-0002 m-lag system-number 1 m-la…...
化工企业数字化转型:从数据贯通到生态重构的实践路径
一、战略定位:破解行业核心痛点 化工行业面临生产安全风险高(全国危化品企业事故率年增5%)、能耗与排放压力大(占工业总能耗12%)、供应链协同低效(库存周转率低于制造业均值30%)三大挑战。《石…...
JAVA——初识JAVA
文章目录 如何在cmd上编译、运行代码解析String[] args中放的是什么Java结构编译运行可能遇到的错误Java中的注释Java的三种注释编码不一致的问题 IDEA常用基础开发快捷键补齐快捷键注释快捷键 IDEA的基础调式方法标识符 如何在cmd上编译、运行 在没有集成开发环境下ÿ…...
Shell脚本的学习
编写脚本文件 定义以开头:#!/bin/bash #!用来声明脚本由什么shell解释,否则使用默认shel 第一步:编写脚本文件 #!/bin/bash #注释 echo "这是输出" 第二步:加上执行权限:chmod x 脚本文件名.sh 第三步&…...
专题十四:动态路由——OSPF
一、OSPF简介 开放式最短路径优先OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内部网关协议(Interior Gateway Protocol),采用DIjkstra算法,协议号是89。用于自治系统(A…...
聊聊Spring AI的Multimodality
序 本文主要研究一下Spring AI的Multimodality 示例 chatModel示例 var imageResource new ClassPathResource("/multimodal.test.png");var userMessage new UserMessage("Explain what do you see in this picture?", // contentnew Media(MimeTy…...
区块链点燃游戏行业新未来——技术变革与实践指南
区块链点燃游戏行业新未来——技术变革与实践指南 在数字时代,游戏行业无疑是创新的热土。从简单像素风的街机游戏到沉浸式的虚拟现实,我们见证了技术如何一步步塑造游戏的样貌。然而,在传统游戏模式中,玩家权益往往无法得到保障…...
Cocos Creator Shader入门实战(八):Shader实现圆形、椭圆、菱形等头像
引擎:3.8.5 您好,我是鹤九日! 回顾 Shader的学习是一条漫长的道路。 理论知识的枯燥无味,让很多人选择了放弃。然而不得不说:任何新知识、新领域的学习,本身面临的都是问题! 互联网和AI给了我…...
大模型SFT用chat版还是base版 SFT后灾难性遗忘怎么办
大模型SFT用chat版还是base版 进行 SFT 时,基座模型选用 Chat 还是 Base 模型? 选 Base 还是 Chat 模型,首先先熟悉 Base 和 Chat 是两种不同的大模型,它们在训练数据、应用场景和模型特性上有所区别。 在训练数据方面…...
【AI论文】VCR-Bench:视频链式思考推理的综合评估框架
摘要:思想链(CoT)推理的进步显著增强了大型语言模型(LLMs)和大型视觉语言模型(LVLMs)的能力。 然而,目前仍然缺乏一个严格的视频CoT推理评估框架。 目前的视频基准测试无法充分评估推…...
数据中台、BI业务访谈(二):组织架构梳理的坑
这是数据中台、BI业务访谈系列的第二篇文章,在上一篇文章中,我重点介绍了在给企业的业务部门、高层管理做业务访谈之前我们要做好行业、业务知识的功课。做好这些功课之后,就到了实际的访谈环节了。 业务访谈关键点 那么在具体业务访谈的时…...
【零基础实战】Ubuntu搭建DVWA漏洞靶场全流程详解(附渗透测试示例)
【零基础实战】Ubuntu搭建DVWA漏洞靶场全流程详解(附渗透测试示例) (声明:实际操作请遵守网络安全法,仅在授权环境进行测试,仅供个人研究) 一、DVWA靶场简介 DVWA(Damn Vulnerable Web Application)是专为网络安全学习者设计的漏洞演练平台,包含SQL注入、XSS、文件…...
