目錄
發現問題,節省時間
自我記錄
架構
代码的语言
结论
首頁 CMS教程 &#&按 單元測試理論(續):第 2 部分

單元測試理論(續):第 2 部分

Sep 02, 2023 pm 02:37 PM

单元测试理论(续):第 2 部分

#在上一篇文章中,我們開始討論 WordPress 中的單元測試理論。具體來說,我們回顧了我們在單元測試主題和插件方面的工作,然後開始討論程式碼單元,這如何影響我們的測試,並且我們回顧了更大的軟體開發世界中的單元測試。

我們將繼續討論 WordPress 中的單元測試理論,但會從它如何幫助識別問題、驅動架構、記錄專案等角度進行討論。


發現問題,節省時間

回想一下本系列前面的內容,進行單元測試的傳統方法是這樣的:

  • 寫測試,運行它(知道它會失敗)
  • 編寫函數以使該方法通過。
  • 運行測試。如果測試失敗,則繼續處理該功能;否則,請轉到下一個。

是的,第一步有點教條。為什麼要浪費時間去運行一些你知道會失敗的東西,對吧?不過,你明白了。但是當您開始將這種特殊技術應用於開發時,您會發現編寫程式碼時會形成一定的節奏,而這是整個目標的一部分。

但這只是其中的一半——單元測試實際上可以幫助您在開發早期發現問題。

為了理解這一點,最好回顧一下這個想法。

假設您正在為基於 WordPress 的專案開發一項功能,您將允許使用者在不實際登入 WordPress 儀表板的情況下建立使用者帳戶。這假設您已經設定了一個頁面範本來處理註冊、必要的驗證以及用於產生密碼和電子郵件的程式碼。

您在瀏覽器中載入頁面,嘗試建立一些使用者 - 一些具有相同的電子郵件地址,有些具有不正確的密碼,有些具有非法字元等。您明白了 - 有多種方法驗證通過和失敗。這太粗糙了吧!這表示每次變更使用者註冊功能時,您都必須執行相同的 n 次註冊,以確保不會出現任何問題。

或您可以編寫一套測試來處理它,並在每次程式碼更改時運行它們。

所以,是的,編寫單元測試可能會花費大量時間,但看看每次修改程式碼單元時節省的時間。這是非常值得的,這可以幫助儘早發現問題(即在發佈到生產之前),這些問題可能會因為有人忘記模擬測試的一種排列而被錯過。


自我記錄

在編寫單元測試時,您不僅可以透過確保程式碼實際運作來提高程式碼質量,而且本質上還可以提供面向開發人員的文件。

如果您正在對產品中建置的功能進行單元測試,您將提供有關功能如何運作、何時應該失敗以及何時應該通過的文件。

隨之而來的是一些假設:具體來說,您正在邏輯地命名和分組您的函數及其相關測試,並且您正在正確測試每個函數。

透過 PHPUnit,WordPress 單元測驗可以輕鬆執行易於閱讀的斷言。您只需聲明assertTrue、assertFalse 或組成專案的函數上可用的任何其他斷言。

按照上面的範例,這表示您可以編寫一個函數來確保使用者註冊函數在嘗試使用空電子郵件地址註冊時失敗:

$this->assertFalse( registerNewUser( '' ) );
登入後複製

也許是一個簡單的例子,但重點仍然是:您的程式碼變得自文檔化,並且只需要您編寫清晰的單元測試。


架構

也許單元測試最被低估的優勢之一是它可以幫助驅動專案的架構。通常,主題或外掛程式開發可以透過以下兩種方式之一開始:

  1. 列出函數,繪製使用者介面,然後編寫程式碼
  2. 畫出文件如何協同工作的圖表,然後寫程式碼

這些本質上並不是壞事,但我認為它們很弱(我會是第一個承認我所做的事情比我想分享的要多的人!)。但是「編寫程式碼」步驟需要承擔很多責任,不是嗎?

對於任何一個長時間編寫程式碼的人來說,你都太熟悉了,以至於你最終會意識到,“哦......我沒有想到這一點。”

如果你幸運的話,這通常意味著你可以編寫一個輔助方法或另一個條件來處理你忽略的情況,但在最壞的情況下,這意味著你可能必須重新設計你的整個類別或整個集合解決這個問題的函數。

單元測試雖然不完美,但可以幫助緩解這種情況。

考慮一下這樣一個事實:從一開始,您就列出了您希望主題或外掛程式提供的所有功能。您尚未編寫任何程式碼,但也許您有某種類型的 UI 草圖和/或一組類別圖。

接下来,您开始编写要编写的测试以测试您的项目。回想一下,单元测试的一部分是将代码分解为尽可能的原子单元,因此您的任务是为每个单元编写单元测试,咳咳

由于单元测试的性质,您本质上会以不同的方式思考您的代码:您正在考虑“编写测试”,而不是“编写代码”,并且因为您必须在更原子的级别上进行思考,您会情不自禁地考虑经常被归入“编写代码”的边缘案例。


代码的语言

作为开发人员,我们非常习惯使用不断强化我们编写代码的约定。我的意思是,我们倾向于提供缩写的变量名称、神秘的函数名称和类名称,这些名称对于您自己或项目团队之外的任何人来说可能没有任何意义。

单元测试不一定是编写更易于阅读的代码的关键,但它可以进一步帮助提供更清晰的函数名称。

回想一下您读过的第一本编程书、您参加的第一堂计算机科学课或者您看到的第一段开源代码,方法名称通常是动词。为什么他们不应该这样?方法是封装代码的方法,做一些事情。但随着我们在项目上工作的时间越来越长,我们变得越来越懒,我们的代码从“register_user_and_email_password()”变成“new_account()”。

显然,前者比后者更清晰,但如果我们致力于高质量的单元测试,并且希望确保我们的单元测试易于阅读,为了使它们易于阅读,我们的函数名称必须易于阅读。

这不是更容易阅读吗:

$this->assertFalse( register_user_and_email_password( '' ) );
登入後複製

而不是这个?

$this->assertFalse( new_account( '' ) );
登入後複製

同样,这也许是一个简单的示例,但原则仍然是:编写良好的单元测试,以帮助自我记录驱动函数语言的代码。


结论

我们已经讨论了单元测试的基础知识以及主要优点,但是我们还没有讨论单元测试带来的缺点,我们甚至还没有考虑如何将其合并到我们的项目中。工作流程。

因此,在下一篇文章中,我们将尝试做到这一点。

以上是單元測試理論(續):第 2 部分的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何開始WordPress博客:初學者的分步指南 如何開始WordPress博客:初學者的分步指南 Apr 17, 2025 am 08:25 AM

博客是人們在網上表達觀點、意見和見解的理想平台。許多新手渴望建立自己的網站,卻因擔心技術障礙或成本問題而猶豫不決。然而,隨著平台不斷發展以滿足初學者的能力和需求,現在開始變得比以往任何時候都更容易。 本文將逐步指導您如何建立一個WordPress博客,從主題選擇到使用插件提升安全性和性能,助您輕鬆創建自己的網站。 選擇博客主題和方向 在購買域名或註冊主機之前,最好先確定您計劃涵蓋的主題。個人網站可以圍繞旅行、烹飪、產品評論、音樂或任何激發您興趣的愛好展開。專注於您真正感興趣的領域可以鼓勵持續寫作

對於初學者來說,WordPress容易嗎? 對於初學者來說,WordPress容易嗎? Apr 03, 2025 am 12:02 AM

WordPress對初學者來說容易上手。 1.登錄後台後,用戶界面直觀,簡潔的儀表板提供所有必要功能鏈接。 2.基本操作包括創建和編輯內容,所見即所得的編輯器簡化了內容創建。 3.初學者可以通過插件和主題擴展網站功能,學習曲線存在但可以通過實踐掌握。

如何在父分類的存檔頁面上顯示子分類 如何在父分類的存檔頁面上顯示子分類 Apr 19, 2025 pm 11:54 PM

您想了解如何在父分類存檔頁面上顯示子分類嗎?在自定義分類存檔頁面時,您可能需要執行此操作,以使其對訪問者更有用。在本文中,我們將向您展示如何在父分類存檔頁面上輕鬆顯示子分類。為什麼在父分類存檔頁面上顯示子分類?通過在父分類存檔頁面上顯示所有子分類,您可以使其不那麼通用,對訪問者更有用。例如,如果您運行一個關於書籍的WordPress博客,並且有一個名為“主題”的分類法,那麼您可以添加“小說”、“非小說”等子分類法,以便您的讀者可以

如何在 WordPress 中獲取登錄用戶信息以獲得個性化結果 如何在 WordPress 中獲取登錄用戶信息以獲得個性化結果 Apr 19, 2025 pm 11:57 PM

最近,我們向您展示瞭如何通過允許用戶將自己喜歡的帖子保存在個性化庫中來為用戶創建個性化體驗。您可以通過在某些地方(即歡迎屏幕)使用他們的名字,將個性化結果提升到另一個水平。幸運的是,WordPress使獲取登錄用戶的信息變得非常容易。在本文中,我們將向您展示如何檢索與當前登錄用戶相關的信息。我們將利用get_currentuserinfo(); 功能。這可以在主題中的任何地方使用(頁眉、頁腳、側邊欄、頁面模板等)。為了使其工作,用戶必須登錄。因此我們需要使用

如何在 WordPress 中按帖子過期日期對帖子進行排序 如何在 WordPress 中按帖子過期日期對帖子進行排序 Apr 19, 2025 pm 11:48 PM

過去,我們分享過如何使用PostExpirator插件使WordPress中的帖子過期。好吧,在創建活動列表網站時,我們發現這個插件非常有用。我們可以輕鬆刪除過期的活動列表。其次,多虧了這個插件,按帖子過期日期對帖子進行排序也非常容易。在本文中,我們將向您展示如何在WordPress中按帖子過期日期對帖子進行排序。更新了代碼以反映插件中更改自定義字段名稱的更改。感謝Tajim在評論中讓我們知道。在我們的特定項目中,我們將事件作為自定義帖子類型。現在

wordpress文章列表怎麼調 wordpress文章列表怎麼調 Apr 20, 2025 am 10:48 AM

有四種方法可以調整 WordPress 文章列表:使用主題選項、使用插件(如 Post Types Order、WP Post List、Boxy Stuff)、使用代碼(在 functions.php 文件中添加設置)或直接修改 WordPress 數據庫。

如何在 WordPress 中顯示查詢數量和頁面加載時間 如何在 WordPress 中顯示查詢數量和頁面加載時間 Apr 19, 2025 pm 11:51 PM

我們的一位用戶詢問其他網站如何在頁腳中顯示查詢數量和頁面加載時間。您經常會在網站的頁腳中看到這一點,它可能會顯示類似以下內容:“1.248秒內64個查詢”。在本文中,我們將向您展示如何在WordPress中顯示查詢數量和頁面加載時間。只需將以下代碼粘貼到主題文件中您喜歡的任何位置(例如footer.php)。 queriesin

我可以在3天內學習WordPress嗎? 我可以在3天內學習WordPress嗎? Apr 09, 2025 am 12:16 AM

能在三天內學會WordPress。 1.掌握基礎知識,如主題、插件等。 2.理解核心功能,包括安裝和工作原理。 3.通過示例學習基本和高級用法。 4.了解調試技巧和性能優化建議。

See all articles