PHP單元測(cè)試?yán)?PHPUNIT深入用法(三)
Phpunit中的Mocking
在介紹Mocking前,先來(lái)看下為什么要使用Mocking。舉一個(gè)數(shù)據(jù)庫(kù)查詢的例子,比如在某個(gè)應(yīng)用中,如果要測(cè)試一個(gè)數(shù)據(jù)庫(kù)的應(yīng)用,但假如這個(gè)數(shù)據(jù)庫(kù)的測(cè)試要耗費(fèi)很多資源以及編寫(xiě)很復(fù)雜的單元測(cè)試的代碼的話,可以嘗試使用Mocking技術(shù)。舉例說(shuō)明如下:














在上面這個(gè)例子中,我們模擬了一個(gè)數(shù)據(jù)庫(kù)的操作,認(rèn)為它需要運(yùn)行很長(zhǎng)時(shí)間。接下來(lái)我們編寫(xiě)其單元測(cè)試代碼如下:































注意看這段代碼中有趣的地方,這里,使用了phpunit中的getMock對(duì)象方法,這里實(shí)際上是模擬生成一個(gè)Database類的“偽實(shí)例”了,這里生成了$mock這個(gè)mock對(duì)象實(shí)例,以方便接著的單元測(cè)試中用到。接下來(lái)的這三行代碼:




它們的含義為:無(wú)論方法reallyLongtime執(zhí)行了多長(zhǎng)時(shí)間,始終最后會(huì)直接返回$result這個(gè)數(shù)組的結(jié)果。這樣,你就可以通過(guò)mocking技術(shù)很輕易地去實(shí)現(xiàn)在單元測(cè)試中,繞過(guò)某些復(fù)雜的邏輯部分,而節(jié)省大量的寶貴時(shí)間提高測(cè)試效率。
下面的這個(gè)例子,講解的是Mocking技術(shù)中的更高級(jí)用法Mockbuilder。依然以上面的例子說(shuō)明:


















通過(guò)使用Mockbuilder,我們可以不用通過(guò)構(gòu)造函數(shù)的方法去初始化一個(gè)mock對(duì)象。這段代碼跟上一段代碼的功能其實(shí)是一樣的,只不過(guò)留意一下新的兩個(gè)方法: disableAutoload和disableOriginalConstructor,其功能分別是禁止使用php的內(nèi)置的autoload初始構(gòu)造方法和禁止調(diào)用該類原有的構(gòu)造函數(shù)。最后再看一個(gè)例子:
















在這里,我們使用了with方法,其中這個(gè)方法中指定了要傳入的參數(shù)類型為array數(shù)組類型,最后這個(gè)斷言是通過(guò)了,因?yàn)榉祷氐牡拇_是數(shù)組類型。
更多的關(guān)于phpunit中mock的用法,請(qǐng)參考phpunit手冊(cè)中第11章的論述。
- Windows下安裝PHP單元測(cè)試環(huán)境PHPUnit圖文教程
- PHP單元測(cè)試?yán)?PHPUNIT初探
- PHP單元測(cè)試?yán)?PHPUNIT深入用法(二)
- PHP單元測(cè)試PHPUnit簡(jiǎn)單用法示例
- PHP單元測(cè)試框架PHPUnit用法詳解
- 使用PHPUnit進(jìn)行單元測(cè)試并生成代碼覆蓋率報(bào)告的方法
- php單元測(cè)試phpunit入門實(shí)例教程
- PHP使用phpunit進(jìn)行單元測(cè)試示例
- PHPUnit + Laravel單元測(cè)試常用技能
- Windows下wamp php單元測(cè)試工具PHPUnit安裝及生成日志文件配置方法
- laravel單元測(cè)試之phpUnit中old()函數(shù)報(bào)錯(cuò)解決
- PHPUnit 單元測(cè)試安裝與使用入門教程
相關(guān)文章
PHP下利用shell后臺(tái)運(yùn)行PHP腳本,并獲取該腳本的Process ID的代碼
PHP下利用shell后臺(tái)運(yùn)行PHP腳本,并獲取該腳本的Process ID的代碼,學(xué)習(xí)php的朋友可以參考下。2011-09-09PHP中有關(guān)長(zhǎng)整數(shù)的一些操作教程
這篇文章主要給大家介紹了關(guān)于PHP中有關(guān)長(zhǎng)整數(shù)的一些操作教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用PHP具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09解析array splice的移除數(shù)組中指定鍵的值,返回一個(gè)新的數(shù)組
array_splice這個(gè)數(shù)組函數(shù)在w3school的解釋是把數(shù)組中的一部分去掉并用其它值取代。所以我在做數(shù)組移除的時(shí)候沒(méi)有考慮到用這個(gè)函數(shù),或者因?yàn)閺膩?lái)沒(méi)有用過(guò)2013-07-07一些PHP Coding Tips(php小技巧)[2011/04/02最后更新]
以下是一些PHP Coding Tips. 當(dāng)然, 這些Tips并不一定僅僅局限于PHP.大家有什么好的心得, 歡迎直接回復(fù)本文與更多的人分享.. 謝謝2011-05-05解析phpstorm + xdebug 遠(yuǎn)程斷點(diǎn)調(diào)試
本篇文章是對(duì)phpstorm + xdebug 遠(yuǎn)程斷點(diǎn)調(diào)試進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06PHP實(shí)現(xiàn)的敏感詞過(guò)濾方法示例
這篇文章主要介紹了PHP實(shí)現(xiàn)的敏感詞過(guò)濾方法,涉及php字符串正則匹配、分割、轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下2019-03-03