TLDR;
使用相同参数调用嘲笑value1
)时,如何第一次获得value2
,第二次获得shouldReceive('method
?
可以说我有一个$order
对象,该对象使用方法getState()
实现此签名。
interface Order {
public function getState();
}
现在,在单元测试中,我想使用嘲弄来模拟$order
对象,以便在调用getState
时
initialized
值processing
值好吧,我知道对于基于...->with($param1)->andReturn...
的参数返回值不同的情况,可以这样做。
加withConsecutive
似乎是对phpunit
的一种方式。我该如何在嘲讽中实现这一点?我在mockery doc或stackoverflow上都找不到任何相关内容。
谢谢。
答案 0 :(得分:2)
从Declaring Return Value Expectations部分开始:
可以为多个返回值设置期望值。通过 提供一系列返回值,我们告诉Mockery要 后续每次调用该方法均会返回:
$mock = \Mockery::mock('MyClass'); $mock->shouldReceive('name_of_method') ->andReturn($value1, $value2, ...)
第一个调用将返回$ value1,第二个调用将返回 $ value2。
答案 1 :(得分:1)
我认为可以在嘲笑的array_shift
方法中使用andReturnUsing
来完成
$orderStates = [
'intially-order-was' => 'initialized',
'then-order-becomes' => 'processing'
];
$order
->shouldReceive('getState')
->andReturnUsing(function() use (&$orderStates) {
return array_shift($orderStates);
});