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

Windows 下 PHPUnit 配置與使用完整教程:環境變量、測試類編寫、執行調試

     編輯:PHP 相關知識

Windows 下 PHPUnit 配置與使用完整教程

記錄在 Windows 10 + WAMP + PHP 5.5 環境下安裝配置 PHPUnit 4.8 的完整過程,重點解決「php 不是內部命令」環境變量陷阱,並演示從舊代碼重構為可測試類、編寫測試用例、執行驗證的全流程。

環境信息

  • 系統:Windows 10 專業版
  • PHP:5.5.12 (WAMPServer 2.5)
  • PHPUnit:4.8 (對應 PHP 5.5)

一、下載與安裝

  1. 官網 phpunit.de 下載 phpunit-4.8.phar
  2. 重命名為 phpunit.phar,放入項目目錄(如 D:\project\mobile_api_test)
  3. 配置系統環境變量 PATH,追加:;D:\project\mobile_api_test
  4. 關鍵:同時添加 PHP 可執行文件路徑到 PATH(如 ;E:\wamp\bin\php\php5.5.12),否則 php 命令不可用

二、生成批處理腳本並驗證

cd D:\project\mobile_api_test
echo @php "%~dp0phpunit.phar" %* > phpunit.cmd
phpunit --version
# 輸出: PHPUnit 4.8.18 by Sebastian Bergmann and contributors.

PHPUnit版本驗證

三、代碼重構:從腳本到可測試類

原始 login.php (不可測試)

<?php
error_reporting(0);
$workNumber = $_POST["login-user"];
$password = $_POST["login-password"];
$tableName = $_POST["ident"];
$con = mysqli_connect("localhost","root","","teacher_class_system");
// 直接輸出、混合邏輯...

重構為 classes/class_login.php

<?php
class Login {
    public function login($workNumber = "", $password = "", $tableName = "") {
        $con = mysqli_connect("localhost","root","","teacher_class_system");
        if (!$con) die('Could not connect: ' . mysqli_error());
        mysqli_query($con, "SET NAMES utf8");
        
        $result = mysqli_query($con, "SELECT * FROM $tableName WHERE workNumber=$workNumber AND password=$password");
        if (!$result || mysqli_num_rows($result) == 0) {
            return "false";
        }
        $row = mysqli_fetch_assoc($result);
        return json_encode($row, JSON_UNESCAPED_UNICODE);
    }
}

修改原 login.php 調用類

require_once './classes/class_login.php';
$log = new Login();
$response = $log->login($_POST["login-user"], $_POST["login-password"], $_POST["ident"]);
if ($response != "false") {
    session_start();
    $_SESSION['id'] = $_POST["ident"];
}
echo $response;

四、編寫測試用例 login_test.php

<?php
require_once dirname(__FILE__).'/../mobile_api/classes/class_login.php';

class LoginTest extends PHPUnit_Framework_TestCase {
    public function testLoginSuccess() {
        $expected = '{"workNumber":"00001","password":"00001","name":"西瓜","sex":"男","birthday":"20151201","department":"計算機","telephone":"110","email":"git@github.com"}';
        $lg = new Login();
        $actual = $lg->login('00001', '00001', 'user_teacher');
        $this->assertEquals($expected, $actual);
    }

    public function testLoginFail() {
        $expected = 'false';
        $lg = new Login();
        $actual = $lg->login('11111', '11111', 'user_teacher');
        $this->assertEquals($expected, $actual);
    }
}

五、執行測試

cd D:\project\mobile_api_test
phpunit login_test.php

測試執行結果

六、踩坑總結與避坑指南

  1. PHAR 不需解壓:直接配合 phpunit.cmd 使用
  2. 雙重 PATH 配置:PHPUnit 目錄 + PHP 可執行文件目錄,缺一不可
  3. 測試類命名規範:*Test.php,類繼承 PHPUnit_Framework_TestCase,方法以 test 開頭
  4. 依賴隔離:資料庫測試建議使用 SQLite 內存庫或 Mock 操作,避免污染生產數據
  5. 環境變量通用原理:遇到「命令不存在」優先檢查 PATH,同理適用於 Git、Composer、Node 等工具鏈

PHPUnit 讓 PHP 代碼擁有自動化回歸能力,配合 CI/CD 流水線可顯著提升交付質量。建議進一步學習 Data Providers、Fixtures、Mock Objects、Code Coverage 等進階特性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved