如何在PHP单元测试中处理对未定义函数的调用


How to handle a call to an undefined function in a PHP unit test

我对单元测试比较陌生,所以也许有人可以在这里帮助我。

在终端中执行PHP单元测试时出现以下错误信息:

Fatal error: Call to undefined function Path'to'missing_function() in /path/to/file.php on line 123

通常情况下,我现在会使用getMock(originalClassName)函数创建一个虚拟对象,然后预定义应该为missing_function()返回的内容,但遗憾的是,该函数没有像我迄今为止测试的所有其他函数一样放置在任何接口/类中。

有人知道吗?恭喜恭喜!

一般来说,您只需将文件包含在函数中,并执行该函数。然后你只需要确保在你的代码被执行之后,应该发生的事情发生了。您更关心正在测试的代码的结果,而不是代码如何执行的过程。

但是,如果您需要模拟一个函数,有一种方法是使用名称空间(需要PHP 5.3+)。在您的测试文件中,您可以将"mock"函数放置在与代码相同的名称空间中。当函数被调用时,php首先在当前名称空间中查找,并将找到您的替换函数。在代码的正常运行中,它将继续到全局命名空间调用您的函数。

所以你的代码会像这样结束: 你们班

:

namespace Foo;
class SUT {
    public function bar() {
        return baz();
    }
}
测试:

namespace Foo;
function bar() {
    return 'boz';
}
class SUTTest extends PHPUnit_Framework_TestCase {
    public function testBar() {
        $sut = new SUT();
        $this->assertEquals('boz', $sut->bar());
    }
}