單元測試檢查軟件的最小構(gòu)成部分(如函數(shù)、方法),php 可通過 phpunit 框架進(jìn)行單元測試。首先安裝 phpunit,然后創(chuàng)建測試類(擴(kuò)展自 testcase),再編寫以 “test” 開頭的測試方法,使用 assertequals 斷言兩個值相等。實戰(zhàn)案例中,stringutilstest.php 測試 stringutils 類的方法 ucfirst();mocks 用于隔離代碼,例如模擬數(shù)據(jù)庫依賴項。示例代碼展示了如何使用 phpunit 測試 httprequest::get() 方法,通過模擬對象創(chuàng)建依賴項的模擬版本、設(shè)置模擬返回值和驗證服務(wù)方法調(diào)用。
使用 PHP 進(jìn)行單元測試
單元測試是一種軟件測試技術(shù),它檢查軟件的最小獨立構(gòu)成部分(單元)——函數(shù)、方法或類。
安裝 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
登錄后復(fù)制
創(chuàng)建測試類
每個測試類都以 “Test” 后綴命名,并擴(kuò)展自 PHPUnit\Framework\TestCase 類:
class SomeClassTest extends PHPUnit\Framework\TestCase
{
// ...
}
登錄后復(fù)制
編寫測試方法
每個測試方法都以 “test” 開頭,后面跟著要測試的功能的名稱:
public function testAddNumbers()
{
$result = someFunction(1, 2);
$this->assertEquals(3, $result);
}
登錄后復(fù)制
assertEquals 方法斷言兩個值相等。
運行測試
要運行測試,請使用 PHPUnit 命令:
vendor/bin/phpunit
登錄后復(fù)制
實戰(zhàn)案例:測試字符串工具類
考慮一個名為 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);
}
}
登錄后復(fù)制
使用 mocks
Mocks 允許您模擬外部依賴項的行為,以在單元測試中隔離您的代碼。例如,如果您要測試依賴于數(shù)據(jù)庫的類,則可以使用一個 mock 來模擬數(shù)據(jù)庫,而無需實際查詢。
示例代碼:使用 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'));
}
}
登錄后復(fù)制
此示例展示了如何使用模擬對象創(chuàng)建依賴項的模擬版本,如何設(shè)置模擬返回值以及如何驗證服務(wù)的方法調(diào)用。






