2017-09-05 55 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

是的,我也喜欢你的观点。非常感谢:) –

相关问题