PHP 單元測試 第一次進行測試

再進行此章節之前,如果還沒安裝過 PHPUnit 的朋友,可以先前往 PHPUnit 安裝篇 學習怎麼安裝唷!


在深入單元測試領域之前,至少先了解一次測試流程怎麼跑,才不會覺得學習沒有頭緒。
本章節將一步一步帶您體驗整個測試的流程。
1.撰寫可測試的受測程式
其實只用簡單的程式碼也可以進行測試!所以接下來就拿簡單的 Hello 來做範例。
首先建立一個 index.php 的檔案以便進行第一個測試。
<?php
$name = $_GET['name'];
printf('Hello %s', $name);
現在的 Hello 程式碼,如果 name 沒有在 URL 中被定義的話,
將會接收到一個 PHP 的警告,
所以我們將 index.php 範例做點小修改,賦予 name 一個預設值。
<?php
$name = isset($_GET['name']) ? $_GET['name'] : 'World';
printf('Hello %s', $name);
index.php 執行結果為:
2.撰寫第一個測試程式
第一次進行測試不要太複雜😋,到此為止就可以開始寫第一個測試程式了唷!
首先在專案目錄下建立一個 tests 目錄,日後統一把測試程式存放在 tests 目錄下
接著建立第一個測試檔案為 IndexTest.php
檔案: tests/IndexTest.php
<?php

class IndexTest extends \PHPUnit\Framework\TestCase
{
    public function testHello()
    {
        $_GET['name'] = 'Wade';

        ob_start();
        include '../index.php';
        $content = ob_get_clean();

        $this->assertEquals('Hello Wade', $content);
    }
}
在測試程式中,必須載入受測程式 index.php。除此之外為了模擬透過 URL 存取 index.php 頁面,故給予 $_GET[‘name’] 一個值。
最後使用斷言檢測程式執行結果是否符合預期。此測試程式使用的斷言為 $this->assertEquals ,其第一個參數為預期的結果,二個參數為程式執行結果,兩個參數相同時此測試才算通過。

測試程式注意事項:
  • 測試程式的檔案通常以 「受測檔案名稱+Test」 來命名。
  • 一個測試程式會有一個 class,且 class 名稱須與檔案名稱相同。
  • 測試程式 class 通常會繼承 「TestCase」,以便取得測試斷言 Method。
  • \PHPUnit\Framework\ 為 PHPUnit 的 namespace,用 Composer 安裝完 PHPUnit 之後就自動幫你引入這個 Namespace 了。
  • 把要進行測試的功能寫在一個 function 裡面,且 function 必須以 「test」 為開頭。
此時我們的專案目錄結構為
專案根目錄
專案根目錄
root/
├──  index.php            // 受測程式 index.php
├──  test/                // tests 資料夾
    ├──  IndexTest.php    // 測試程式 IndexTest.php
├──  Composer/            // Composer 資料夾
    ├──  vendor/          
        ├── bin/         
            ├──  phpunit  // phpunit 執行檔,稍後必須使用它來執行測試程式。

3.執行第一次測試

要執行測試其實很簡單,首先移動到 tests 目錄, 並且引用 Composer 安裝的 phpunit 測試 IndexTest.php。
cd tests
../Composer/vendor/bin/phpunit IndexTest.php
以下為執行結果:

看見 OK 代表已經通過第一次測試了唷!
另外,可以透過 phpunit.xml 設定檔來對你的測試做設定。在 tests 目錄下新增一個 phpunit.xml,其內容為:
<phpunit colors="true">
    <!-- ...測試相關設定 -->
</phpunit>
沒有 phpunit.xml 的時候,phpunit 只會用預設值進行所有測試。
在此範例中只教大家怎麼開啟顏色條,想了解其他更多設定可以前往 phpunit官網進行研究。
寫好 phpunit.xml 後,再執行一次測試,就可以看見傳說中的通過綠條囉:-D

留言

這個網誌中的熱門文章

Git Commit Message 這樣寫會更好,替專案引入規範與範例

Gitlab 合併請求 Merge Request 是什麼?

PHP OO 物件導向基礎教學