首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHPUnit 入門指南:從安裝到撰寫第一個單元測試

     編輯:PHP 綜合知識

為什麼需要單元測試?

開發過程中常遇到:功能完成卻屢現 Bug、修復一處卻引發新錯誤、重構不敢動手。單元測試能有效解決這些痛點——它不僅能及早發現錯誤,更能讓程式碼更易維護、重構更有信心。只要測試通過,即證明修改未破壞既有功能。

常見誤區與真相

  • 誤區 1:寫測試浪費時間 → 事實上,自動化測試執行速度遠快於手動點擊驗證,長期來看大幅節省除錯成本。
  • 誤區 2:程式跑得動就不必測試 → 缺乏測試保護,新成員輕易引入迴歸錯誤;良好的測試即是最佳文件。
  • 誤區 3:測試枯燥無聊 → 早期發現錯誤反而減少加班,何樂不為?

安裝 PHPUnit(以 PEAR 為例)

pear channel-discover pear.phpunit.de
pear channel-discover components.ez.no
pear channel-discover pear.symfony-project.com
pear install phpunit/PHPUnit

或參考官方手冊手動安裝:PHPUnit 安裝指南

撰寫第一個測試案例

被測試類別:RemoteConnect

<?php
class RemoteConnect {
    public function connectToServer($serverName=null) {
        if($serverName===null){
            throw new Exception("That's not a server name!");
        }
        $fp = fsockopen($serverName, 80);
        return ($fp) ? true : false;
    }
    public function returnSampleObject() {
        return $this;
    }
}

測試類別:RemoteConnectTest

<?php
require_once('RemoteConnect.php');

class RemoteConnectTest extends PHPUnit_Framework_TestCase {
    public function setUp(){ }
    public function tearDown(){ }

    public function testConnectionIsValid() {
        $connObj = new RemoteConnect();
        $serverName = 'www.google.com';
        $this->assertTrue($connObj->connectToServer($serverName) !== false);
    }
}

PHPUnit 命名規範重點

  1. 測試類別繼承 PHPUnit_Framework_TestCase,可使用 setUp()、tearDown()。
  2. 類別命名:被測類別名 + Test(如 RemoteConnectTest)。
  3. 測試方法以 test 開頭,且必須為 public(如 testConnectionIsValid())。
  4. 測試方法不可帶參數。

執行測試

phpunit RemoteConnectTest.php

若顯示 OK (1 test, 1 assertion) 即代表通過。

延伸閱讀

  • 偽對象與存根,隔離外部依賴
  • 資料提供者,實現參數化測試
  • 程式碼覆蓋率報告產生
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved