PHP 質量保證工具概述:提升 PHP 代碼質量的實用指南
本文重點介紹 PHPUnit、Cucumber、Atoum、Selenium、Dusk、Kahlan 和 PHP Testability 等關鍵 PHP 質量保證工具,它們各自提供獨特的測試和代碼質量改進功能。此外,持續集成 (CI) 服務(如 PHPCI、TravisCI、SemaphoreCI 和 Jenkins)對於團隊項目至關重要,因為它們會在代碼合併到官方項目存儲庫之前自動檢查代碼。
雖然建立測試文化具有挑戰性,但對於代碼質量至關重要。使用上述工具可以幫助開發人員開始進行測試,並確保其 PHP 編碼實踐的質量。
(此熱門文章已於 2017 年 6 月 30 日更新,以包含最新的技術和工具。)
為了交付高質量的代碼,我們必須在編碼時(如果不是進行測試驅動開發 (TDD) 的話)考慮到測試。然而,鑑於 PHP 測試工具種類繁多,很難做出選擇!探索 PHP 是一次有趣的冒險,但要組建一個不會過於繁重的工具箱卻很難!
這篇文章將重點介紹最流行的測試工具,並已更新以反映 2017 年質量保證工具的現狀。
未經測試的代碼就是有問題的代碼。
PHPUnit 是 PHP 的首選測試框架。它由 Sebastian Bergmann 於 2004 年創建,當前版本為 6,需要 PHP 7。
我們有很多關於它的教程即將推出。
Cucumber 是一個用於根據規範創建驗收測試的框架。它以其描述性生成的文本而聞名,這些文本可以像普通的英語一樣閱讀。 Cucumber 的官方 PHP 實現是 Behat。
我們在這裡的 SitePoint 上有一個關於它的入門教程。以下摘自文檔的示例很好地說明了這些期望的表達方式。
<code>Feature: Listing command In order to change the structure of the folder I am currently in As a UNIX user I need to be able see the currently available files and folders there Scenario: Listing two files in a directory Given I am in a directory "test" And I have a file named "foo" And I have a file named "bar" When I run "ls" Then I should get: """ bar foo """</code>
Atoum 是另一個用於 PHP 的單元測試框架。它是一個獨立的包,您可以通過 GitHub、Composer 或 PHAR 可執行文件安裝。
Atoum 測試具有非常高的可讀性,方法名稱和鏈接表達清晰。
<code>$this->integer($classInstance->myMethod()) ->isEqualTo(10); $this->string($classInstance->myMethod()) ->contains("Something heppened"); </code>
如果您想了解有關使用 Atoum 進行 PHP 單元測試的更多信息,可以閱讀本教程。
Selenium 是一個用於自動化瀏覽器測試(集成和驗收測試)的工具。它將測試轉換為瀏覽器 API 命令,並斷言預期結果。它支持大多數可用的瀏覽器。
我們可以使用擴展程序將 Selenium 與 PHPUnit 配合使用。
<code>Feature: Listing command In order to change the structure of the folder I am currently in As a UNIX user I need to be able see the currently available files and folders there Scenario: Listing two files in a directory Given I am in a directory "test" And I have a file named "foo" And I have a file named "bar" When I run "ls" Then I should get: """ bar foo """</code>
這是一個簡單的示例:
<code>$this->integer($classInstance->myMethod()) ->isEqualTo(10); $this->string($classInstance->myMethod()) ->contains("Something heppened"); </code>
如果您想了解有關使用 PHPUnit 和 Selenium 進行測試的更多信息,可以閱讀本系列文章。
Laravel 的 Dusk 是另一個瀏覽器自動化工具。它可以獨立使用(使用 chromedriver)或與 Selenium 配合使用。它具有易於使用的 API,涵蓋了所有測試可能性,例如等待元素、文件上傳、鼠標控制等。這是一個簡單的示例:
<code>composer require --dev phpunit/phpunit composer require --dev phpunit/phpunit-selenium </code>
您可以查看本教程以開始使用 Dusk 進行測試。
Kahlan 是一個功能齊全的單元和 BDD 測試框架,它使用 describe-it 語法。
<code>class UserSubscriptionTest extends PHPUnit_Extensions_Selenium2TestCase { public function testFormSubmissionWithUsername() { $this->byName('username')->value('name'); $this->byId('subscriptionForm')->submit(); } } </code>
從上面的語法可以看出,它類似於 Behat 測試。 Kahlan 支持開箱即用的存根和模擬,無需依賴項、代碼覆蓋率、報告等。
<code>class LanguagesControllerTest extends DuskTestCase { public function testCreate() { $this->browse(function (Browser $browser) { $user = $this->getAdminUser(); $browser->loginAs($user) ->visit('/panel/core/languages') ->click('#add') ->assertPathIs('/panel/core/languages/create') ->type('name', 'Arabic') ->select('direction', 'rtl') ->press('Submit') ->assertSee('Language: Arabic') ->assertSee('ar') ->assertSee('rtl') ->assertSee('Language created'); }); } } </code>
最後要提到的一個包是 PHP Testability。它是一個靜態分析工具,可以告訴您程序中的可測試性問題,並生成詳細的報告。
該包目前沒有您可以依賴的標記版本,但您可以在開發中安全地使用它。您可以通過 Composer 安裝它:
<code>describe("Positive Expectation", function() { it("expects that 5 > 4", function() { expect(5)->toBeGreaterThan(4); }); }); </code>
然後像這樣運行它:
<code>it("makes a instance double with a parent class", function() { $double = Double::instance(['extends' => 'Kahlan\Util\Text']); expect(is_object($double))->toBe(true); expect(get_parent_class($double))->toBe('Kahlan\Util\Text'); }); </code>
在與團隊合作交付代碼時,一個重要部分是在將代碼合併到項目的官方存儲庫之前自動檢查代碼的能力。大多數可用的 CI 服務/工具都能夠在不同的平台和配置上測試代碼,以確保您的代碼可以安全地合併。
有很多服務提供良好的價格等級,但您也可以使用開源工具:
建立測試文化很難,但它會隨著實踐而緩慢增長。如果您關心您的代碼,您應該測試它!上述工具和資源將幫助您快速入門。
您對上述工具的經驗如何?我們是否遺漏了什麼?請告訴我們,我們將盡最大努力用必要的工具擴展列表!
選擇 PHP 質量保證工具時,需要考慮幾個關鍵功能。首先,該工具應該能夠執行靜態代碼分析,這涉及檢查源代碼中是否存在潛在的錯誤、bug 或違反編碼標準的情況,而無需執行程序。其次,該工具應該提供單元測試框架,允許您測試源代碼的各個單元,以確定它們是否適合使用。其他重要功能包括代碼覆蓋率分析(衡量代碼測試的程度)和持續集成(定期將所有開發人員的工作副本合併到共享主線上)。
PHP 質量保證工具可以通過自動化許多原本耗時且容易出錯的任務來顯著提高開發過程的效率。例如,靜態代碼分析可以自動檢測潛在的錯誤和違反編碼標準的情況,從而免除了您手動檢查代碼的麻煩。同樣,單元測試框架可以自動測試源代碼的各個單元,確保它們在集成到更大的系統之前能夠正常運行。這可以節省您大量用於調試和故障排除的時間和精力。
是的,有很多可用的開源 PHP 質量保證工具。其中包括 PHP_CodeSniffer(檢查代碼中是否存在違反編碼標準的情況);PHPUnit(單元測試框架);以及 PHPMD(查找代碼中存在的潛在問題,例如 bug、次優代碼和過於復雜的表達式)。這些工具免費使用,並且可以根據您的特定需求進行定制。
(以下 FAQ 答案類似地改寫,保持原文意思不變,並調整語言風格,使之更流暢自然。)
以上是8必須具有PHP質量保證工具的詳細內容。更多資訊請關注PHP中文網其他相關文章!