我需要使用Mockery模拟一个模拟类的方法的存在,但是当我使用method_exists进行检查时,我得到了错误的结果:
$mock = m::mock('ClassA')->makePartial();
$mock->shouldReceive('getMethod')->andReturn('A');
var_dump(method_exists($mock, 'getMethod'));
结果:
bool(false)
如何使其起作用?
答案 0 :(得分:1)
getMethod不得在ClassA中存在,以使method_exists失败。
模拟现有类时,method_exists对于该类中实际存在的任何方法将返回true。
当该方法不存在时,由于shouldReceive实际上不会定义方法而是使用重载(__call
),因此它仍将返回false。
答案 1 :(得分:0)
对于被测类的名称空间,您可以覆盖method_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);
};