Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 返回发送到模拟函数的参数?_Php_Unit Testing_Mocking_Phpunit_Mockery - Fatal编程技术网

Php 返回发送到模拟函数的参数?

Php 返回发送到模拟函数的参数?,php,unit-testing,mocking,phpunit,mockery,Php,Unit Testing,Mocking,Phpunit,Mockery,我对PHP Mockry框架相当陌生,并尝试在模拟的服务请求函数上测试多个函数。不同的函数发送具有不同值的相同变量名。我想测试以确保每个案例都符合模拟类。我可以通过模拟函数接收多个参数并将它们返回给tester函数吗 要测试的功能: public function doSomething() { $result = $this->serviceRequest('stuff', '/url', []); return $result; } 用于测试功能的伪代码: p

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

要测试的功能:

    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个参数正在closure
$args
中验证):


谢谢

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

   $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()
);

如果您需要模拟基于参数返回值的内容,而不仅仅是测试参数是否符合您的预期,请记住
anderturnusing()
确实接受了前面提到的asker那样的闭包。它传递给该方法的参数。
   $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()
);