phpunit:an expected any()何时有用,为什么存在?

phpunit:an expected any()何时有用,为什么存在?,phpunit,Phpunit,有时我看到一些人在写作 ->expects($this->any()) 在我看来,这完全是多余的。对我来说,这意味着“我不在乎这个期望”,我错了吗?我认为链式呼叫可能是一个很好的例子(以电话为例) 如果你想用传统的方式模拟它,你最终会为每个调用创建单独的模拟!只需模拟一行代码,它就可以轻松地增长到代码屏幕的一半!但是等等,有办法 $value = 'some mocked value'; $mock = $this->getMock('ServiceClass',

有时我看到一些人在写作

->expects($this->any())

在我看来,这完全是多余的。对我来说,这意味着“我不在乎这个期望”,我错了吗?

我认为链式呼叫可能是一个很好的例子(以电话为例)

如果你想用传统的方式模拟它,你最终会为每个调用创建单独的模拟!只需模拟一行代码,它就可以轻松地增长到代码屏幕的一半!但是等等,有办法

$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));

这样,对mock的每个连续调用都会返回自身,因此可以根据需要多次链接它。您不会检查方法是否按所需的顺序调用,但这不是真正的问题。最终,您需要的是测试对调用结果执行某些操作的代码。

aaah,很好,很好。但是在这种情况下,我的猜测是您可以删除
->expected($this->any())
。他们看起来很奇怪你是对的。但它可能出于文档目的而存在:我们明确地说“可以根据需要多次调用”。显式比隐式好,对吗?:)当然,这是口味的问题。或者,当这种方法在循环中时
$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));