【发布时间】:2012-11-17 21:14:28
【问题描述】:
我正在尝试在 setUp 中创建一个模拟实例,并为所有被覆盖的方法提供默认值,然后在几个不同的测试中根据我正在测试的内容更改某些方法的返回值,而无需设置整个模拟。有没有办法做到这一点?
这是我尝试过的,但天真的方法不起作用。该方法仍然返回原始期望设置的值。
第一次设置:
$my_mock->expects($this->any())
->method('one_of_many_methods')
->will($this->returnValue(true));
在另一个断言之前的另一个测试中:
$my_mock->expects($this->any())
->method('one_of_many_methods')
->will($this->returnValue(false));
重复这个问题:PHPUnit Mock Change the expectations later,但那个人没有得到任何回应,我认为一个新问题可能会引发这个问题。
【问题讨论】:
-
AFAIK 不幸的是,phpunit 没有这种可能性。例如,您可以使用 $my_mock->__phpunit_hasMatchers(),但这并不是您想要的。当然,您可以使用a)“at”匹配器或b)“returnCallback”在同一方法上设置不同的返回值,但它们取决于a)调用顺序b)调用参数..但也不是您想要的。我会让你知道我发现了一些新的东西。