返回发送到Mockery模拟函数的参数


Return arguments being sent to a Mockery mocked function?

我对PHP Mockery框架相当陌生,并试图在一个模拟的服务请求函数上测试多个函数。不同的函数发送具有不同值的相同变量名。我想测试一下,以确保每个案例都符合模拟类。我可以用我的模拟函数接收多个参数并将每个参数返回给测试函数吗?

要测试的功能:

    public function doSomething() {
    $result = $this->serviceRequest('stuff', '/url', []);
    return $result;
}

测试函数的伪代码:

public function testDoSomething() {
    $service_mock = $this->mockService();
    $this->assertEquals($service_mock->doSomething(), $returnedArgs);
}

理想情况下,我希望将这三个参数发送到mock,并将它们与mock的andReturn()或类似的东西一起返回,以在原始测试方法中断言(以验证它们是否发送到了mock)。有没有一个好的方法来做到这一点,或者我错过了一个常见的做法?

现在,我的mock看起来类似于这个伪代码(这3个参数正在闭包$args中进行验证):

        $client->shouldReceive('serviceRequest')->withArgs($args)->once()->andReturnUsing($args)->getMock();

谢谢!

您可以使用回调来执行此操作:下面的例子改编自Mockery文档,尽管它将其用作引用传递的例子,但它可以用于任何自定义期望。

   $m->shouldReceive('insert')->with(
    'Mockery::on(function(&$data) use($logger) {
        if (!is_array($data)) return false;
        $data['_id'] = 123;
        $logger->logParameters('insert', $data);
        return true;
    }),
    'Mockery::any()
);

http://docs.mockery.io/en/latest/reference/pass_by_reference_behaviours.htm