2017-09-05 53 views

回答

1

我覺得有可能是鏈式調用(取from here)一個很好的例子

$this->someService 
    ->getSomething() 
    ->getSomethingElse() 
    ->doMore($x) 
    ->proceed() 
    ->toGetTheFinalCall($y); 

如果你想嘲笑它在傳統的方式,你會在爲每一個呼叫建立獨立的模擬考試結束了!爲了模擬一條線,它會輕鬆地增長到屏幕的一半。但等待有一種方法!

$value = 'some mocked value';  

$mock = $this->getMock('ServiceClass', array('getSomething', 
     'getSomethingElse','doMore','proceed','toGetTheFinalCall'), array(), '', false); 

$mock->expects($this->any())->method('toGetTheFinalCall') 
     ->will($this->returnValue($value)); 

$mock->expects($this->any())->method($this->anything()) 
     ->will($this->returnValue($mock)); 

這種方式每次連續調用模擬模塊都會返回自身,因此可以根據需要連接多次。你不會檢查方法是否按照所需順序調用,但這不是一個真正的問題。最終你想要的是測試那些對調用結果做些什麼的代碼。

+0

aaaah,很好,那很好。但在這種情況下,我的猜測是你可以刪除''' - >期望($ this-> any())'''。他們只是看起來很奇怪 –

+0

你說得對。但它可能出於文檔目的:我們明確地說「可以根據需要多次調用」。顯式比隱式更好,對嗎? :)但當然它的味道的問題。 –

+0

是的,我也喜歡你的觀點。非常感謝:) –

相關問題