嘲讽和方法

时间:2018-07-16 15:05:38

标签: php mocking phpunit mockery

我需要使用Mockery模拟一个模拟类的方法的存在,但是当我使用method_exists进行检查时,我得到了错误的结果:

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

结果:

bool(false)

如何使其起作用?

2 个答案:

答案 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);
};