Web 應用 7×24 執行,代碼品質直接關乎業務穩定。單元測試透過自動化驗證最小代碼單元,讓開發者在重構、部署前擁有高度信心。本文以 PHPUnit 2.x 為例(現代專案請用 PHPUnit 9+/10+),示範測試驅動開發(TDD)核心流程。
# 現代專案使用 Composer
composer require --dev phpunit/phpunit
# 執行測試
vendor/bin/phpunit --configuration phpunit.xml
<?php
// tests/AddTest.php
require_once 'Add.php';
class AddTest extends PHPUnit\Framework\TestCase {
public function testAddTwoNumbers() {
$this->assertEquals(3, add(1, 2));
}
public function testAddNegativeNumbers() {
$this->assertEquals(-1, add(-2, 1));
}
}
$ vendor/bin/phpunit tests/AddTest.php
FAILURES!
Tests: 2, Failures: 2.
<?php
// Add.php
function add($a, $b) {
return $a + $b;
}
OK (2 tests, 2 assertions)
如加入型別提示、邊界檢查、效能優化,每次修改後跑測試確保無回歸。
assertEquals($expected, $actual):值相等assertSame($expected, $actual):型別與值皆相等assertTrue/False($condition):布林判斷assertNull/NotNull($var):空值檢查assertContains($needle, $haystack):包含檢查assertThrows($exceptionClass, $callable):例外拋出驗證/**
* @dataProvider additionProvider
*/
public function testAdd($a, $b, $expected) {
$this->assertEquals($expected, add($a, $b));
}
public function additionProvider() {
return [
[1, 2, 3],
[0, 0, 0],
[-1, 1, 0],
[1.5, 2.5, 4.0],
];
}
$mock = $this->createMock(Database::class);
$mock->method('connect')->willReturn(true);
$mock->method('query')->willReturn(['id'=>1, 'name'=>'Test']);
// 注入被測類別
$service = new UserService($mock);
test__ (如 testAdd_PositiveNumbers_ReturnsSum)。setUp()/tearDown() 初始化。建立單元測試文化,不僅是工具引入,更是團隊對代碼品質的承諾。從今天開始,為每一個新功能寫下第一個失敗的測試吧。