談php設(shè)計(jì)模式介紹——偽對(duì)象模式(2)_PHP教程
推薦:解析php字符串處理函數(shù)addcslashes 為字符串里面的部分字符添加反斜線轉(zhuǎn)義字符 addslashes 用指定的方式對(duì)字符串里面的字符進(jìn)行轉(zhuǎn)義 bin2hex 將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成十六進(jìn)制表示 chr 返回一個(gè)字符的ASCII碼 chunk_split 按一定的字符長(zhǎng)度將字符串分割成小塊 convert_cyr_string 將斯
在上面的例子中,這種手段創(chuàng)建了一個(gè)名為MockAccumulator的類來(lái)響應(yīng)所有Accumulator類的方法。另外,偽累加的動(dòng)作還有其他手段來(lái)操作偽對(duì)象自身的實(shí)例。例如 setReturnValue()。給出一個(gè)方法名和一個(gè)值,
setReturnValue()就可以改變偽對(duì)象而給出對(duì)應(yīng)方法所調(diào)用的值。因此,這條語(yǔ)句$amount->setReturnValue(‘total’, 200)返回200而不論何時(shí)調(diào)用了total()方法。
一旦進(jìn)行完初始化工作后,你可以傳遞MockAccumulator類到calc_tax()函數(shù)來(lái)演示一個(gè)在真實(shí)的Accumulator對(duì)象空間中的動(dòng)作。
如果你止步于此——即用一個(gè)對(duì)象來(lái)返回所調(diào)用函數(shù)的“封裝”響應(yīng)——你只是使用了ServerStub模式。 用偽對(duì)象來(lái)驗(yàn)證方法的調(diào)用不限于此,因?yàn)樗梢圆幌薮涡蚺c次數(shù)。
下面是一個(gè)通過(guò)對(duì)象來(lái)驗(yàn)證“數(shù)據(jù)流”的例子:
class MockObjectTestCase extends UnitTestCase {
// ...
function testCalcTax() {
$amount =& new MockAccumulator($this);
$amount->setReturnValue(‘total’,200);
$amount->expectOnce(‘total’);
$this->assertEqual(
14, calc_tax($amount));
$amount->tally();
}
}
這里expectOnce()方法使用了一個(gè)字符串,它包含你想調(diào)用的方法名 。而tally()實(shí)際上用來(lái)檢查你的想法是否實(shí)現(xiàn)。這里,如果MockAccumulator::total()只調(diào)用一次或不調(diào)用,測(cè)試將失敗。
在很多情況下你可以使用偽對(duì)象的”跟蹤”特性。例如,如果你傳遞一個(gè)具有三個(gè)值的數(shù)組到calc_total(),Accumulator::add()是否也如你所想的調(diào)用了三次呢?
class MockObjectTestCase extends UnitTestCase {
// ...
function testCalcTotalAgain() {
$sum =& new MockAccumulator($this);
$sum->expectOnce(‘add’);
calc_total(array(1,2,3), $sum);
$sum->tally();
}
}
那,這里發(fā)生了什么?傳遞調(diào)用的測(cè)試失敗。SimpleTest的錯(cuò)誤消息如下所示:
MockObject PHP4 Unit Test
1) Expected call count for [add] was [1] got [3] at line [51]
in testcalctotalagain in mockobjecttestcase
FAILURES!!!
Test cases run: 1/1, Passes: 2, Failures: 1, Exceptions: 0
錯(cuò)誤消息指出了盡管add() 方法被調(diào)用三次,但expectOnce()卻一次也沒(méi)用到。取代expectOnce()的可行方法是使用expectCallCount()。
class MockObjectTestCase extends UnitTestCase {
// ...
function testCalcTotalAgain() {
$sum =& new MockAccumulator($this);
$sum->expectCallCount(‘add’, 3);
calc_total(array(1,2,3), $sum);
$sum->tally();
}
}
偽對(duì)象扮演了一個(gè)演員的角色——這個(gè)角色由SeverStub提供合理的測(cè)試數(shù)據(jù)來(lái)響應(yīng)方法的調(diào)用——并且作為一個(gè)評(píng)判的角色,驗(yàn)證所調(diào)用的方法是否符合預(yù)想。
分享:怎樣把握技巧開(kāi)發(fā)PHP網(wǎng)站1.使用 ip2long() 和 long2ip() 函數(shù)來(lái)把 IP 地址轉(zhuǎn)化成整型存儲(chǔ)到數(shù)據(jù)庫(kù)里。這種方法把存儲(chǔ)空間降到了接近四分之一(char(15) 的 15 個(gè)字節(jié)對(duì)整形的 4 個(gè)字節(jié)),計(jì)算一個(gè)特定的地址是不是在一個(gè)區(qū)段內(nèi)頁(yè)更簡(jiǎn)單了,而且加快了搜索和排序的速度(雖然有時(shí)僅
- PHPNOW安裝Memcached擴(kuò)展方法詳解
- php記錄頁(yè)面代碼執(zhí)行時(shí)間
- PHP中獎(jiǎng)概率的抽獎(jiǎng)算法程序代碼
- apache設(shè)置靜態(tài)文件緩存方法介紹
- php對(duì)圖像的各種處理函數(shù)代碼小結(jié)
- PHP 關(guān)于訪問(wèn)控制的和運(yùn)算符優(yōu)先級(jí)介紹
- 關(guān)于PHP語(yǔ)言構(gòu)造器介紹
- php/js獲取客戶端mac地址的實(shí)現(xiàn)代碼
- php5.5新數(shù)組函數(shù)array_column使用
- PHP preg_match的匹配多國(guó)語(yǔ)言的技巧
- php 中序列化和json使用介紹
- php采集文章中的圖片獲取替換到本地
- 相關(guān)鏈接:
- 教程說(shuō)明:
PHP教程-談php設(shè)計(jì)模式介紹——偽對(duì)象模式(2)
。