記錄在 Windows 10 + WAMP + PHP 5.5 環境下安裝配置 PHPUnit 4.8 的完整過程,重點解決「php 不是內部命令」環境變量陷阱,並演示從舊代碼重構為可測試類、編寫測試用例、執行驗證的全流程。
phpunit-4.8.pharphpunit.phar,放入項目目錄(如 D:\project\mobile_api_test);D:\project\mobile_api_test;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.

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

phpunit.cmd 使用*Test.php,類繼承 PHPUnit_Framework_TestCase,方法以 test 開頭PHPUnit 讓 PHP 代碼擁有自動化回歸能力,配合 CI/CD 流水線可顯著提升交付質量。建議進一步學習 Data Providers、Fixtures、Mock Objects、Code Coverage 等進階特性。