亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > 淺談如何提高PHP代碼質量之單元測試

淺談如何提高PHP代碼質量之單元測試

熱門標簽:凱立德地鐵站地圖標注 天津電銷外呼系統違法嗎 合肥ai電銷機器人費用 溫州外呼系統招商 上海400客服電話怎么申請 400電話個人能不能辦理 滄州電銷外呼系統價格 手機外呼系統什么原理 銀行信貸電話機器人

1、單元測試

通過實現單一責任原則(我們的代碼應該只關注功能的單個部分),我們將確保在測試期間,我們只會同時關注項目的一小部分

通過使用 Liskov 替換原則和依賴倒置原則,我們的代碼不會關心我們是否注入模擬依賴關系,只要它們實現了適當的接口

在單元測試中,我們確實希望用模擬對象替換所有依賴的服務,因此我們一次只測試一個類。但模擬是什么?它們是實現與其他對象相同的接口的對象,但它們的行為是受控的。例如,假設我們在創建一個價格比較服務,我們利用另一個服務來獲取當前的匯率。在測試我們的比較器時,我們可以使用一個模擬對象來為特定的貨幣返回特定的匯率,因此我們的測試既不依賴也不調用真正的服務。

2、應該使用哪個框架?

有幾個好的框架可以達到這個目的。最常見的可能是 PHPUnit。在我的工作中,我發現使用行為方法來編寫測試會帶來更好的結果,并使我更急切地編寫測試。對于我們的項目,我們選擇 phpspec。

安裝過程相當簡單 - 只需使用:

$ php composer.phar require --dev phpspec/phpspec

然后,如果你在本文的第一部分中配置了 PHing,那么你可以在 build.xml 中添加構建目標:

target name="phpspec">
	exec executable="bin/phpspec" passthru="true" checkreturn="true">
		arg line="run --format=pretty" />
	/exec>
/target>...
target name="run" depends="phpcs,phpcpd,phan,phpspec" />

然后,你必須為你想要測試的每個服務類創建一個測試類。讓 PHPSpec 非常容易使用的是模型創建。你只需使用嚴格的輸入,就可以將模擬對象聲明為測試函數的參數。PHPSpec 會自動為你創建模擬。讓我們看一下代碼示例:

//spec/Domain/PriceComparatorSpec.php
?php
namespace spec\Domain;
use Domain\Price;use Domain\PriceConverter;
use PhpSpec\ObjectBehavior;
class PriceComparatorSpec extends ObjectBehavior{
	public function let(PriceConverter $converter)    {       
		$this->beConstructedWith($converter);   
	} 
	public function it_should_return_equal()    {   
		$price1 = new Price(100, 'EUR');     
		$price2 = new Price(100, 'EUR');   
		$this->compare($price1, $price2)->shouldReturn(0);
	}    
	public function it_should_convert_first(PriceConverter $converter) {   
		$price1 = new Price(100, 'EUR');    
		$price2 = new Price(100, 'PLN');    
		$priceConverted = new Price(25, 'EUR');    
		$converter->convert($price2, 'EUR')->willReturn($priceConverted);  
		$this->compare($price1, $price2)->shouldReturn(1); 
	}
}

這里有三個函數:

  • let( ) - 它允許使用依賴來初始化服務
  • 兩個 it_* 函數實現測試。其中一種方法是使用模擬 $priceConverter 的方法實現 priceConverter 接口,該接口被注入到測試對象的創建中。

你可以看到創建模擬非常容易。你所需要做的就是將它定義為測試函數的參數,并通過指定在執行代碼時應該運行哪些函數來配置 mock。如果需要,你還可以設置返回值。

所有測試的方法都是從 $this 上下文中運行的,你可以使用與模擬相同的語法來輕松地檢查它們的結果。

3、如何設置測試?

Phpspec 有一個很好的文檔,但是我將嘗試向你展示一些在日常實踐中有用的基本用例。

構建測試對象

一般來說,設置測試對象的最簡單方法是調用 $this->beConstructedWith(…) 方法,該方法將所有應該傳遞給對象構造函數的 params 作為參數。

如果你的對象應該使用工廠方法來創建,那么你可以使用

this−>beConstructedThrough(this−>beConstructedThrough(methodName,$argumentsArray)方法。

在模擬中匹配運行時參數

你會發現 phpspec 使用一種非常類似于人類的語法來配置模擬。例如,如果你想要檢查在運行時是否有一個模擬方法 someMethod 與參數“desired value”被調用,你可以在測試中定義它,如下面的例子:

$mockObject->someMethod("desired value")->shouldBeCalled();

如果你想要測試代碼的行為,當一些 mock 的函數返回“some value”時,你可以通過調用來輕松地設置它:

$mockObject->someFunction("some input")->willReturn("some value");

有時我們并不真正關心傳遞給 mock 的確切參數。然后可以寫這段代碼:

use Prophecy\Argument\Token\AnyValueToken;
$mockObject->someFunction(new AnyValueToken())->willReturn(true);

有時你會關心一些參數,最好是寫一個檢查函數,它會告訴你是否正確地調用了一些方法,例如:

use Prophecy\Argument\Token\CallbackToken;
$checker = function (Message $message) use ($to, $text) {  
	return $message->to === $to  $message->text === $text;
};
$msgSender->send(new CallbackToken($messageChecker))->shouldBeCalled()

匹配運行時異常

。在某些情況下,異常是代碼接口的一部分。你希望它們在特定的場景被拋出。你可以通過編寫以下代碼來完成這項工作:

$this->shouldThrow(\DomainException::class)->during('execute', [$command, $responder]);

傳給 during() 的第一個參數是將要調用的方法的名稱,第二個參數是將傳遞給我們的方法的參數數組。

4、在哪里可以找到更多的例子?

在本文中,我們只介紹了一些基本的用例。請參考 phpspec 的文檔,以找到更多的示例,這些示例將使你的測試代碼變得漂亮!

代碼覆蓋率

PHPSpec 附帶了擴展子系統,它允許例如創建代碼覆蓋率報告。如果您想要檢查在測試中執行了多少代碼,它們是很有幫助的。

你可以通過以下來安裝這個擴展:

$ php composer.phar require --dev leanphp/phpspec-code-coverage

然后通過創建 phpspec 來啟用它。yml 文件內容:

1 extensions: LeanPHP\PhpSpec\CodeCoverage\CodeCoverageExtension: ~

默認情況下,這個擴展會使用 PHP 的 Xdebug 擴展生成代碼覆蓋率信息,但是 PHP 的本機調試器 - phpdbg 會更快速一些:

$ phpdbg -qrr phpspec run

現在,你可以在 build 中更改 phpspec 的構建目標。xml:

target name="phpspec">
	exec executable="phpdbg" passthru="true" checkreturn="true">
		arg line="-qrr bin/phpspec run --format=pretty" />
	/exec>
/target>...
target name="run" depends="phpcs,phpcpd,phan,phpspec" />

報告在覆蓋率 / 目錄中生成,作為漂亮的 HTML 頁面,可以瀏覽以檢查測試覆蓋率。

以上就是淺談如何提高PHP代碼質量之單元測試的詳細內容,更多關于如何提高PHP代碼質量之單元測試的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • PHPUnit 單元測試安裝與使用入門教程
  • ThinkPHP5與單元測試PHPUnit使用詳解
  • PHP單元測試配置與使用方法詳解
  • PHPUnit + Laravel單元測試常用技能
  • PHP使用phpunit進行單元測試示例
  • 使用PHPUnit進行單元測試并生成代碼覆蓋率報告的方法
  • PHPStorm中如何對nodejs項目進行單元測試詳解
  • PHP單元測試框架PHPUnit用法詳解
  • thinkPHP框架單元測試庫tpunit用法示例

標簽:溫州 怒江 金華 七臺河 白城 洛陽 酒泉 赤峰

巨人網絡通訊聲明:本文標題《淺談如何提高PHP代碼質量之單元測試》,本文關鍵詞  淺談,如何,提高,PHP,代碼,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《淺談如何提高PHP代碼質量之單元測試》相關的同類信息!
  • 本頁收集關于淺談如何提高PHP代碼質量之單元測試的相關信息資訊供網民參考!
  • 推薦文章
    久久99这里只有精品国产| 成人在免费观看视频国产| 精品国产三级a| 精品国产香蕉在线播出 | 精品在线免费播放| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产高清在线精品一区二区| 四虎影视精品永久免费网站| 国产精品自拍一区| 欧美国产日韩在线| 日本特黄特色aaa大片免费| 台湾毛片| 精品视频免费在线| 成人免费高清视频| 久久99青青久久99久久| 91麻豆精品国产高清在线| 四虎影视库国产精品一区| 国产精品123| 欧美大片a一级毛片视频| 台湾美女古装一级毛片| 韩国三级视频网站| 精品在线免费播放| 九九九网站| 精品久久久久久综合网| 国产韩国精品一区二区三区| 精品国产一区二区三区久久久蜜臀 | 色综合久久久久综合体桃花网| 99久久精品国产麻豆| 国产不卡在线观看视频| 国产视频一区二区在线观看| 高清一级片| 亚洲精品影院一区二区| 亚欧乱色一区二区三区| 日本在线www| 国产不卡高清在线观看视频| 日日日夜夜操| 欧美激情一区二区三区在线| 黄色免费网站在线| 成人免费高清视频| a级毛片免费观看网站| 四虎影视久久久免费| 免费一级片在线| 久久久久久久男人的天堂| 韩国毛片| 国产91素人搭讪系列天堂| 黄色短视屏| 亚洲天堂一区二区三区四区| 亚飞与亚基在线观看| 精品国产一区二区三区免费| 99热视热频这里只有精品| 成人a级高清视频在线观看| 免费国产在线观看| 成人免费一级毛片在线播放视频| 精品久久久久久免费影院| 青青久久精品| 久久久久久久网| 日韩中文字幕一区| 中文字幕97| 精品国产一区二区三区久久久狼 | a级精品九九九大片免费看| 天天做人人爱夜夜爽2020| 久久福利影视| 精品视频在线看| 久久99中文字幕久久| 日韩中文字幕在线亚洲一区| 久久国产精品自由自在| 欧美1区| 日韩中文字幕在线亚洲一区| 日韩免费在线视频| 高清一级毛片一本到免费观看| 成人影院久久久久久影院| 亚洲wwwwww| 麻豆系列国产剧在线观看| 精品国产一区二区三区免费| 亚洲 男人 天堂| 国产精品1024永久免费视频| 美国一区二区三区| 精品久久久久久免费影院| 成人免费观看的视频黄页| 国产麻豆精品免费密入口| 一级女性全黄生活片免费| 久草免费在线视频| 成人a大片在线观看| 精品在线免费播放| 欧美国产日韩精品| 国产91精品一区二区| 九九精品久久| 青青久久精品| 国产成人欧美一区二区三区的| 国产一级强片在线观看| 超级乱淫黄漫画免费| 久草免费资源| 亚欧成人乱码一区二区| 日日爽天天| 黄色福利片| 日韩女人做爰大片| 亚洲 激情| 成人a级高清视频在线观看| 国产高清视频免费| 999久久久免费精品国产牛牛| 成人a大片在线观看| 九九热精品免费观看| 高清一级片| 九九久久99| 韩国三级香港三级日本三级| 午夜在线亚洲| 久久福利影视| 久久精品大片| 精品国产一级毛片| 成人影院久久久久久影院| 欧美爱色| 亚洲 男人 天堂| 国产原创中文字幕| 一级毛片视频免费| 欧美电影免费看大全| 日本乱中文字幕系列| 国产美女在线一区二区三区| 国产a免费观看| 欧美国产日韩在线| 日韩女人做爰大片| 久久成人性色生活片| 午夜在线亚洲| 国产一区精品| 日韩av成人| 麻豆网站在线免费观看| 国产极品白嫩美女在线观看看 | 国产精品自拍一区| 香蕉视频久久| 国产麻豆精品免费视频| 青青久久精品| 麻豆午夜视频| 99热精品在线| 久久精品大片| 成人免费网站久久久| 国产一区二区福利久久| 国产视频一区二区三区四区| 久久国产精品自由自在| 99色精品| 日本伦理网站| 一级毛片视频播放| 99色吧| 成人免费网站久久久| 免费一级片在线| 国产成人精品影视| 999久久久免费精品国产牛牛| 91麻豆国产福利精品| 中文字幕Aⅴ资源网| 精品视频免费观看| 精品视频在线看| 欧美大片一区| 精品毛片视频| 99热热久久| 夜夜操网| 韩国三级视频网站| 欧美爱色| 国产不卡精品一区二区三区| 欧美激情一区二区三区视频| 尤物视频网站在线| 美女免费毛片| 日韩专区在线播放| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 亚洲 男人 天堂| 美女免费毛片| 99久久精品国产片| 亚洲wwwwww| 四虎影视久久久免费| 精品国产一区二区三区久久久狼 | 九九精品久久久久久久久| 日本伦理片网站| 国产原创中文字幕| 韩国毛片免费| 午夜激情视频在线播放| 精品视频在线观看视频免费视频| 一本高清在线| 韩国三级香港三级日本三级| 九九久久国产精品大片| 国产网站免费在线观看| 青草国产在线| 国产激情一区二区三区| 成人免费一级毛片在线播放视频| 99色吧| 国产成人欧美一区二区三区的| 精品国产三级a| 国产网站免费视频| 91麻豆精品国产自产在线| 成人免费观看视频| 久久国产精品永久免费网站| 国产精品12| 成人高清视频免费观看| 国产国语对白一级毛片| 天天色色网| 亚洲爆爽| 一a一级片| 欧美国产日韩一区二区三区| 高清一级做a爱过程不卡视频| 国产美女在线观看| 色综合久久手机在线| 香蕉视频久久| 色综合久久手机在线| 九九精品影院|