Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.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_Mocking_Phpunit_Mockery - Fatal编程技术网

Php 嘲弄和方法的存在

Php 嘲弄和方法的存在,php,mocking,phpunit,mockery,Php,Mocking,Phpunit,Mockery,我需要用mockry来模拟被模拟类的方法的存在性,但是当我使用方法_exists来检查时,我得到了一个错误的结果: $mock = m::mock('ClassA')->makePartial(); $mock->shouldReceive('getMethod')->andReturn('A'); var_dump(method_exists($mock, 'getMethod')); 结果: bool(false) 如何使其工作?getMethod不能存在于ClassA

我需要用mockry来模拟被模拟类的方法的存在性,但是当我使用方法_exists来检查时,我得到了一个错误的结果:

$mock = m::mock('ClassA')->makePartial();
$mock->shouldReceive('getMethod')->andReturn('A');
var_dump(method_exists($mock, 'getMethod'));
结果:

bool(false)

如何使其工作?

getMethod不能存在于ClassA中,否则方法_将失败

模拟现有类时,对于该类中实际存在的任何方法,方法_exists将返回true


当该方法不存在时,由于shouldReceive实际上不会定义方法,但会使用重载(
\u call
),因此它仍将返回false。

您可以为被测类的命名空间重写
method\u exists
函数

下面的代码进入测试用例文件

// someTest.php

namespace App\Class\Under\Test\Namespace;

function method_exists($object, $method_name) {

    if ($method_name == 'getMethod') {
        return true;
    }
    return \method_exists($object, $method_name);
};

的确那么,如何检查被模拟的方法是否存在?为什么要模拟一个不存在的方法?该方法存在,但该类是存根。看起来应该将该方法添加到存根中。您可以使用is_callable,但对于mock,它在任何情况下都会返回true。是的。是否可调用始终返回true。