亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PHP單元測(cè)試?yán)?PHPUNIT深入用法(三)

 更新時(shí)間:2011年03月06日 21:48:19   作者:  
在本系列文章的前兩篇中PHP單元測(cè)試?yán)鳎篜HPUNIT初探和PHP單元測(cè)試?yán)鳎篜HPUNIT深入用法(二)中,分別介紹了phpunit的基本用法和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ō)明如下:

 

<?php
class Database
{
public function reallyLongTime()
{
$results = array(
array(1,'test','foo value')
);
sleep(100);
return $results;
}
}
?>

 

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

 

<?php
require_once '/path/to/Database.php';
class DatabaseTest extends PHPUnit_Framework_TestCase
{
private $db = null;
public function setUp()
{
$this->db = new Database();
}
public function tearDown()
{
unset($this->db);
}
/**
* Test that the "really long query" always returns values
*/
public function testReallyLongReturn()
{
$mock = $this->getMock('Database');
$result = array(
array(1,'foo','bar test')
);
$mock->expects($this->any())
->method('reallyLongTime')
->will($this->returnValue($result));
$return = $mock->reallyLongTime();
$this->assertGreaterThan(0,count($return));
}
}
?>

 

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

 

$mock->expects($this->any())
->method('reallyLongTime')
->will($this->returnValue($result));

 

   它們的含義為:無(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ō)明:

 

<?php
public function testReallyLongRunBuilder()
{
$stub = $this->getMockBuilder('Database')
->setMethods(array(
'reallyLongTime'
))
->disableAutoload()
->disableOriginalConstructor()
->getMock();
$result = array(array(1,'foo','bar test'));
$stub->expects($this->any())
->method('reallyLongTime')
->will($this->returnValue($result));
$this->assertGreaterThan(0,count($return));
}
?>

 

   通過(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è)例子:

 

<?php
/**
* Testing enforcing the type to "array" like the "enforceTypes"
* method does via type hinting
*/
public function ttestReallyLongRunBuilderConstraint()
{
$stub = $this->getMock('Database',array('reallyLongTime'));
$stub->expects($this->any())
->method('reallyLongTime')
->with($this->isType('array'));
$arr = array('test');
$this->assertTrue($stub-> reallyLongTime ($arr));
}
?>

   在這里,我們使用了with方法,其中這個(gè)方法中指定了要傳入的參數(shù)類型為array數(shù)組類型,最后這個(gè)斷言是通過(guò)了,因?yàn)榉祷氐牡拇_是數(shù)組類型。

  更多的關(guān)于phpunit中mock的用法,請(qǐng)參考phpunit手冊(cè)中第11章的論述。

相關(guān)文章

  • PHP下利用shell后臺(tái)運(yùn)行PHP腳本,并獲取該腳本的Process ID的代碼

    PHP下利用shell后臺(tái)運(yùn)行PHP腳本,并獲取該腳本的Process ID的代碼

    PHP下利用shell后臺(tái)運(yùn)行PHP腳本,并獲取該腳本的Process ID的代碼,學(xué)習(xí)php的朋友可以參考下。
    2011-09-09
  • php防止惡意刷新與刷票的方法

    php防止惡意刷新與刷票的方法

    這篇文章主要介紹了php防止惡意刷新與刷票的方法,實(shí)例匯總了常用的cookie方法、session方法及文本數(shù)據(jù)方法等,具有不錯(cuò)的實(shí)用價(jià)值,需要的朋友可以參考下
    2014-11-11
  • PHP中有關(guān)長(zhǎng)整數(shù)的一些操作教程

    PHP中有關(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的移除數(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(php小技巧)[2011/04/02最后更新]

    以下是一些PHP Coding Tips. 當(dāng)然, 這些Tips并不一定僅僅局限于PHP.大家有什么好的心得, 歡迎直接回復(fù)本文與更多的人分享.. 謝謝
    2011-05-05
  • 總結(jié)對(duì)比php中的多種序列化

    總結(jié)對(duì)比php中的多種序列化

    序列化是將變量轉(zhuǎn)換為可保存或傳輸?shù)淖址倪^(guò)程;反序列化就是在適當(dāng)?shù)臅r(shí)候把這個(gè)字符串再轉(zhuǎn)化成原來(lái)的變量使用。這兩個(gè)過(guò)程結(jié)合起來(lái),可以輕松地存儲(chǔ)和傳輸數(shù)據(jù),使程序更具維護(hù)性。下面來(lái)看php中多種序列化的對(duì)比。
    2016-08-08
  • 解析phpstorm + xdebug 遠(yuǎn)程斷點(diǎn)調(diào)試

    解析phpstorm + xdebug 遠(yuǎn)程斷點(diǎn)調(diào)試

    本篇文章是對(duì)phpstorm + xdebug 遠(yuǎn)程斷點(diǎn)調(diào)試進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • php swoft框架實(shí)例用法

    php swoft框架實(shí)例用法

    在本篇文章里小編給大家分享了一篇關(guān)于php swoft框架實(shí)例用法,有需要的朋友們可以學(xué)習(xí)參考下。
    2020-12-12
  • php安裝grpc擴(kuò)展的具體步驟

    php安裝grpc擴(kuò)展的具體步驟

    在本篇文章里小編給大家整理的是一篇關(guān)于php安裝grpc擴(kuò)展的具體步驟,有需要的朋友們可以跟著學(xué)習(xí)參考下。
    2021-07-07
  • PHP實(shí)現(xiàn)的敏感詞過(guò)濾方法示例

    PHP實(shí)現(xiàn)的敏感詞過(guò)濾方法示例

    這篇文章主要介紹了PHP實(shí)現(xiàn)的敏感詞過(guò)濾方法,涉及php字符串正則匹配、分割、轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03

最新評(píng)論