如何使用通義靈碼完成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的插件商店提供了通義靈碼的插件,我們可以直接在插件商店下載:

  1. 點擊頂部菜單欄的?File?->?Settings(在?macOS?上為?PHPStorm?->?Preferences)。

  2. 在設置窗口的左側菜單中選擇?Plugins,然后點擊?Marketplace。

  3. 在搜索框中輸入?“通義靈碼”,找到插件后點擊?Install?按鈕進行安裝。

  1. 安裝完成后,重啟?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?技術的不斷發展,相信通義靈碼將在未來的軟件開發測試領域發揮更加重要的作用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/901074.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901074.shtml
英文地址,請注明出處:http://en.pswp.cn/news/901074.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

批量清空圖片的相機參數、地理位置等敏感元數據

我們在使用相機或者手機拍攝照片的時候,照片中都會帶有一些敏感元數據信息,比如說相機的型號,參數,拍攝的時間地點等等。這些信息雖說不是那么引人注意,但是在某些時候他是非常隱私非常重要的。如果我們將這些信息泄露…

SQL優化算法解析 | PawSQL 如何將EXISTS子查詢“秒拆“為JOIN連接

在數據庫性能調優中,子查詢優化是提升查詢效率的關鍵點之一。今天,我們將分享一個使用 PawSQL 對EXISTS子查詢進行重寫優化的案例,展示如何通過合理的SQL重寫與索引設計,實現超過487516.45%的性能提升! 一、案例分析:EXISTS子查詢的性能困境 這個查詢的目的是找出…

大模型day1 - 什么是GPT

什么是GPT 全稱 Generative Pre-trained Transformer 是一種基于 Transformer 架構的大規模 預訓練 語言模型,由OpenAI研發,但GPT僅僅只是借鑒了Transformer 中 Decoder 的部分,并且做了升級 Transformer 架構 Transformer架構 是一種用于…

MDM功能演示:遠程鎖定與數據擦除,保障企業移動設備安全

在當今高度互聯的商業環境中,企業數據伴隨著員工穿梭于不同城市、時區和設備之間。智能手機、平板電腦和筆記本電腦賦予員工隨時隨地辦公的能力,但也帶來了新的安全挑戰:設備一旦遺失或落入不當之手,企業數據就面臨泄露風險。 無…

深度集成學習不均衡樣本圖像分類

用五個不同的網絡,然后對分類概率進行平均,得到分類結果。基本上分類精度可以提升10% 1.導入基本庫 import torch import copy import torch.nn as nn import torchvision.models as models from torchvision import datasets from torchvision import…

從零開始學java--泛型

泛型 目錄 泛型 引入 泛型類 泛型與多態 泛型方法 泛型的界限 類型擦除 函數式接口 Supplier供給型函數式接口: Consumer消費型函數式接口: Function函數型函數式接口: Predicate斷言式函數式接口: 判空包裝 引入 …

5?? Coze+AI應用基礎教學(2025年全新版本)

目錄 一、了解應用開發 1.1 扣子應用能做什么 1.2 開發流程 1.3 開發環境 二、快速搭建一個AI應用 2.1 AI翻譯應用介紹 2.2 設計你的應用功能 2.3 創建 AI 應用項目 2.4 編寫業務邏輯(新建工作流) 2.5 搭建用戶界面 2.6 效果測試 2.7 發布應用 一、了解應用開發 …

工會成立100周年紀念,開發職工健身AI運動小程序、APP方案推薦

時光荏苒,轉眼間2025年五一將至,這一年對于中華全國總工會而言,具有非凡的歷史意義——它將迎來成立100周年的輝煌時刻。為了慶祝這一盛事,各級工會組織將精心籌備了一系列豐富多彩、形式多樣的紀念活動,旨在展現工會百…

【深度學習】Ubuntu 服務器配置開源項目FIGRET(PyTorch、torch-scatter、torch-sparse、Gurobi 安裝)

開源項目網址:https://github.com/FIGRET/figret 該項目在SIGCOMM2024發表,用深度學習方法處理流量工程中的突發問題 1. 創建新的 Conda 環境 使用國內鏡像源創建環境? conda create -n figret python3.8.0 --override-channels -c https://mirrors.…

【SpringCloud】從入門到精通(上)

今天主播我把黑馬新版微服務課程MQ高級之前的內容都看完了,雖然在看視頻的時候也記了筆記,但是看完之后還是忘得差不多了,所以打算寫一篇博客再溫習一下內容。 課程坐標:黑馬程序員SpringCloud微服務開發與實戰 微服務 認識單體架構 單體架…

MySQL中動態生成SQL語句去掉所有字段的空格

在MySQL中動態生成SQL語句去掉所有字段的空格 在數據庫管理過程中,我們常常會遇到需要對表中字段進行清洗和整理的情況。其中,去掉字段中的空格是一項常見的操作。當表中的字段數量較少時,我們可以手動編寫 UPDATE 語句來處理。但如果表中包…

【Grok 大模型深度解析】第二期:架構探秘與訓練哲學

在上一期的內容中,我們對 Grok 大模型從技術溯源的角度,了解了它從 Transformer 架構局限性出發,邁向混合架構創新的歷程,同時也梳理了從 Grok - 1 到 Grok - 3 的版本迭代所帶來的技術躍遷以及其獨特的差異化優勢。這一期,我們將深入到 Grok 大模型的架構內部,探究其精妙…

c# 使用NPOI將datatable的數據導出到excel

以下是使用 NPOI 庫 將 DataTable 數據導出到 Excel 的詳細步驟和代碼示例(支持 .xls 和 .xlsx 格式): 步驟 1:安裝 NPOI NuGet 包 Install-Package NPOI Install-Package NPOI.OOXML # 若需導出 .xlsx 格式 步驟 2:完整代碼實現 using NPOI.SS.UserModel; using NPOI.…

基于SpringBoot的求職招聘網站系統(源碼+數據庫)

473基于SpringBoot的求職招聘網站系統,本系統共分為2個角色:系統管理員、用戶,主要功能如下 【前臺功能】 用戶角色功能: 1. 注冊和登錄:注冊賬戶并登錄系統,以便訪問更多功能。 2. 個人信息管理&#x…

CSS 過渡與變形:讓交互更絲滑

在網頁設計中,動效能讓用戶交互更自然、流暢,提升使用體驗。本文將通過 CSS 的 transition(過渡)和 transform(變形)屬性,帶你入門基礎動效設計,結合案例演示如何實現顏色漸變、元素…

rqlite:一個基于SQLite構建的分布式數據庫

今天給大家介紹一個基于 SQLite 構建的輕量級分布式關系型數據庫:rqlite。 rqlite 基于 Raft 協議,結合了 SQLite 的簡潔性以及高可用分布式系統的穩健性,對開發者友好,操作極其簡便,其核心設計理念是以最低的復雜度實…

mujoco graspnet 仿真項目的復現記錄

開源項目:https://gitee.com/chaomingsanhua/manipulator_grasp 復現使用的配置:linux系統ubuntu20.04 項目配置記錄: git clone 對應的code后: 需要在graspnet-baseline文件夾中繼續拉取文件,指令記錄:…

【js面試題】new操作做了什么?

這些年也面試了一些外包同事,不知道其他面試官的想法,但就我而言,我更喜歡聽到的是口述代碼的方式: 比如下述代碼 function Animal(age) {this.age age; // 設置新對象的屬性 }const cat new Animal("8");最有效的回…

freecad內部python來源 + pip install 裝包

cmake來源: 只能find默認地址,我試過用虛擬的python地址提示缺python3config.cmake python解釋器位置: python控制臺位置: pip install 裝包: module_to_install "your pakage" import os import FreeCAD …

樹和圖論【詳細整理,簡單易懂!】(C++實現 藍橋杯速查)

樹和圖論 樹的遍歷模版 #include <iostream> #include <cstring> #include <vector> #include <queue> // 添加queue頭文件 using namespace std;const int MAXN 100; // 假設一個足夠大的數組大小 int ls[MAXN], rs[MAXN]; // 定義左右子樹數…