單元測試檢查軟件的最小構成部分(如函數、方法),php 可通過 phpunit 框架進行單元測試。首先安裝 phpunit,然后創建測試類(擴展自 testcase),再編寫以 “test” 開頭的測試方法,使用 assertequals 斷言兩個值相等。實戰案例中,stringutilstest.php 測試 stringutils 類的方法 ucfirst();mocks 用于隔離代碼,例如模擬數據庫依賴項。示例代碼展示了如何使用 phpunit 測試 httprequest::get() 方法,通過模擬對象創建依賴項的模擬版本、設置模擬返回值和驗證服務方法調用。
使用 PHP 進行單元測試
單元測試是一種軟件測試技術,它檢查軟件的最小獨立構成部分(單元)——函數、方法或類。
安裝 PHPUnit
PHPUnit 是一個流行的 PHP 單元測試框架。要安裝它,請運行以下 Composer 命令:
<a style='color:#f60; text-decoration:underline;' href="https://www.php.cn/zt/15906.html" target="_blank">composer</a> require --dev phpunit/phpunit
登錄后復制
創建測試類
每個測試類都以 “Test” 后綴命名,并擴展自 PHPUnit\Framework\TestCase
類:
class SomeClassTest extends PHPUnit\Framework\TestCase { // ... }
登錄后復制
編寫測試方法
每個測試方法都以 “test” 開頭,后面跟著要測試的功能的名稱:
public function testAddNumbers() { $result = someFunction(1, 2); $this->assertEquals(3, $result); }
登錄后復制
assertEquals
方法斷言兩個值相等。
運行測試
要運行測試,請使用 PHPUnit 命令:
vendor/bin/phpunit
登錄后復制
實戰案例:測試字符串工具類
考慮一個名為 StringUtils
的輔助類,它提供一個 ucfirst
方法來將字符串的首字母大寫。我們可以寫一個單元測試來檢驗這個方法:
StringUtilsTest.php
class StringUtilsTest extends PHPUnit\Framework\TestCase { public function testUcfirst() { $string = 'hello world'; $result = StringUtils::ucfirst($string); $this->assertEquals('Hello world', $result); } }
登錄后復制
使用 mocks
Mocks 允許您模擬外部依賴項的行為,以在單元測試中隔離您的代碼。例如,如果您要測試依賴于數據庫的類,則可以使用一個 mock 來模擬數據庫,而無需實際查詢。
示例代碼:使用 PHPUnit 測試 getRequest() 方法
class HttpServiceTest extends TestCase { public function testGetRequest() { $request = $this->getMockBuilder(HttpRequest::class) ->onlyMethods(['get']) ->getMock(); $request->method('get') ->with('name') ->willReturn('John Doe'); $service = new HttpService($request); $this->assertEquals('John Doe', $service->getRequest('name')); } }
登錄后復制
此示例展示了如何使用模擬對象創建依賴項的模擬版本,如何設置模擬返回值以及如何驗證服務的方法調用。