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