返回参数被发送到Mockery模拟函数?

时间:2016-05-15 06:12:14

标签: php unit-testing mocking phpunit mockery

我是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);
}

我理想情况下要将这三个参数发送到模拟器,使用模拟的andReturn()或类似的东西返回它们在原始测试方法中断言(以验证它们是否被发送到模拟)。有没有一个很好的方法来做到这一点或我缺少的常见做法?

现在,我的模拟看起来类似于这个伪代码(并且这三个参数在封闭$args中得到验证):

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

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用回调来执行此操作: 下面的示例适用于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