Php 嘲弄和方法的存在
我需要用mockry来模拟被模拟类的方法的存在性,但是当我使用方法_exists来检查时,我得到了一个错误的结果: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
$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。