婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 淺談如何提高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代碼質量之單元測試的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    天天av天天翘天天综合网色鬼国产| 99精品视频一区二区| 日日夜夜精品免费视频| 欧美视频一区在线| 亚洲午夜日本在线观看| 欧美日韩成人在线| 日本不卡一二三| 欧美一二三四区在线| 激情图片小说一区| 中文字幕精品—区二区四季| www.欧美色图| 丝袜国产日韩另类美女| 欧美电视剧免费观看| 国产激情精品久久久第一区二区 | 久久精品无码一区二区三区 | 美日韩一级片在线观看| 欧美videossexotv100| 国产麻豆精品theporn| 亚洲国产精品成人综合色在线婷婷| 国产精品白丝av| 一区二区三区资源| 日韩一区二区电影网| 国产成人高清在线| 一区二区三区毛片| 久久综合九色综合久久久精品综合| 成人蜜臀av电影| 午夜电影久久久| 国产精品入口麻豆九色| 欧美男男青年gay1069videost | 国产亚洲一区字幕| 99久久99久久精品国产片果冻| 一级日本不卡的影视| 在线不卡a资源高清| 粉嫩13p一区二区三区| 午夜不卡在线视频| 1024成人网| 久久久综合视频| 91麻豆精品国产91久久久更新时间 | 夜夜嗨av一区二区三区中文字幕| 欧美电影一区二区三区| av网站免费线看精品| 毛片一区二区三区| 亚洲影院久久精品| 国产精品欧美一区喷水| 欧美一区二区三区免费观看视频| 99久久综合精品| 国产一区二区不卡老阿姨| 亚洲国产日韩在线一区模特| 国产精品久久久久影院| 久久久久久9999| 欧美本精品男人aⅴ天堂| 在线观看视频一区二区| 97精品久久久久中文字幕| 国产精品一区二区三区四区| 另类的小说在线视频另类成人小视频在线| 一区二区三区四区国产精品| 中文字幕在线不卡一区| 国产精品影视在线| 热久久国产精品| 亚洲不卡av一区二区三区| 一区二区三区丝袜| 亚洲精品日日夜夜| 伊人开心综合网| 亚洲久本草在线中文字幕| 国产精品激情偷乱一区二区∴| 日韩一区二区在线看| 欧美三日本三级三级在线播放| 91网站最新地址| 色先锋资源久久综合| 欧洲亚洲国产日韩| 色中色一区二区| 在线观看欧美精品| 精品视频999| 欧美肥妇bbw| 欧美xxx久久| 久久久蜜臀国产一区二区| 久久综合狠狠综合久久综合88| 久久影院视频免费| 中文字幕一区二区三区精华液 | 国产精品国产三级国产三级人妇| 国产精品日产欧美久久久久| 亚洲欧美综合另类在线卡通| 亚洲你懂的在线视频| 亚洲精品免费播放| 日韩在线a电影| 韩日av一区二区| 不卡一区中文字幕| 一本色道久久综合亚洲精品按摩| 在线观看不卡视频| 欧美大胆人体bbbb| 中文字幕欧美一| 日韩一区精品视频| 国精品**一区二区三区在线蜜桃| 国产不卡免费视频| 色综合久久中文字幕| 欧美一级免费大片| 国产精品久久久久婷婷| 亚洲国产裸拍裸体视频在线观看乱了| 秋霞国产午夜精品免费视频| 国产精品1区二区.| 欧美色涩在线第一页| 久久久精品日韩欧美| 亚洲第四色夜色| 91麻豆免费观看| 欧美日韩高清影院| 欧美激情一区二区三区在线| 亚洲综合一二三区| 男女性色大片免费观看一区二区 | 秋霞成人午夜伦在线观看| 精久久久久久久久久久| 波波电影院一区二区三区| 欧美日韩在线播| 国产欧美一区二区精品忘忧草| 亚洲国产精品影院| 成人夜色视频网站在线观看| 欧美另类高清zo欧美| ...中文天堂在线一区| 国产在线精品免费av| 91久久精品日日躁夜夜躁欧美| 久久在线观看免费| 日韩和欧美一区二区三区| 色婷婷国产精品久久包臀| 欧美激情一区二区三区全黄| 精品一区二区三区在线播放| 欧美疯狂做受xxxx富婆| 亚洲综合在线视频| 91原创在线视频| 国产欧美视频一区二区三区| 精品在线免费观看| 51精品秘密在线观看| 一区二区三区国产| 99久久精品国产导航| 国产精品色在线观看| 国产一区二区三区视频在线播放| 欧美精品粉嫩高潮一区二区| 亚洲国产欧美一区二区三区丁香婷| 成人黄色片在线观看| 日本一区二区电影| 岛国精品在线播放| 国产精品久久久久久久久免费相片| 国产乱子轮精品视频| 久久久久久97三级| 成人免费视频一区| ●精品国产综合乱码久久久久 | 欧美日韩国产一区二区三区地区| 国产精品久久午夜| av电影天堂一区二区在线观看| 欧美国产一区在线| 国产激情视频一区二区三区欧美| 日韩精品一区二区在线观看| 狠狠久久亚洲欧美| 欧美国产1区2区| 99re热视频这里只精品| 亚洲人成人一区二区在线观看 | 裸体一区二区三区| 欧美精品一区二区三区在线 | 色香蕉久久蜜桃| 亚洲第一成人在线| 欧美一区二区福利在线| 国内精品免费在线观看| 国产欧美日韩不卡| 91视频国产资源| 亚洲福中文字幕伊人影院| 欧美一区二区性放荡片| 国产精品自拍一区| 亚洲激情图片qvod| 日韩午夜电影av| 风间由美性色一区二区三区| 亚洲欧洲www| 欧美精三区欧美精三区| 丁香婷婷综合网| 午夜精品久久久久影视| 久久综合久久综合久久综合| 色94色欧美sute亚洲线路二| 免费成人深夜小野草| 国产精品国产三级国产有无不卡| 欧美日韩国产免费| 国产aⅴ精品一区二区三区色成熟| 亚洲激情成人在线| 久久久99久久精品欧美| 91成人网在线| 成人午夜视频免费看| 日本欧美一区二区| 日韩毛片在线免费观看| 欧美成人欧美edvon| 91国产福利在线| 国产jizzjizz一区二区| 日av在线不卡| 亚洲成人av福利| 亚洲另类在线制服丝袜| 欧美激情一区二区三区四区| 日韩欧美国产综合在线一区二区三区| 色综合色狠狠综合色| 国产精品一区二区在线观看网站 | 欧美图区在线视频| 成人激情小说乱人伦| 精品午夜久久福利影院| 五月综合激情婷婷六月色窝| 最新中文字幕一区二区三区 | 亚洲欧美日韩国产综合|