在PHP嘲笑上获取不同的连续值

时间:2019-03-06 15:52:27

标签: php phpunit mockery phpunit-testing

TLDR;

使用相同参数调用嘲笑value1)时,如何第一次获得value2,第二次获得shouldReceive('method

可以说我有一个$order对象,该对象使用方法getState()实现此签名。

interface Order {
    public function getState();
}

现在,在单元测试中,我想使用嘲弄来模拟$order对象,以便在调用getState

  • 第一次返回initialized
  • 第二次返回processing

好吧,我知道对于基于...->with($param1)->andReturn...的参数返回值不同的情况,可以这样做。

withConsecutive似乎是对phpunit的一种方式。我该如何在嘲讽中实现这一点?我在mockery doc或stackoverflow上都找不到任何相关内容。

谢谢。

2 个答案:

答案 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);
});