Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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_Unit Testing_Testing_Drupal_Phpunit - Fatal编程技术网

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

如何在PHP单元测试中处理对未定义函数的调用,php,unit-testing,testing,drupal,phpunit,Php,Unit Testing,Testing,Drupal,Phpunit,我对单元测试比较陌生,所以也许有人可以在这里帮助我 问题 在终端中执行PHP单元测试时出现以下错误消息: Fatal error: Call to undefined function Path\to\missing_function() in /path/to/file.php on line 123 通常,我现在会使用getMock(originalClassName)函数创建一个虚拟对象,然后为missing_function()预定义应该返回的内容,但遗憾的是,该函数没有像我目前测试的

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

问题

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

Fatal error: Call to undefined function Path\to\missing_function() in /path/to/file.php on line 123
通常,我现在会使用
getMock(originalClassName)
函数创建一个虚拟对象,然后为
missing_function()
预定义应该返回的内容,但遗憾的是,该函数没有像我目前测试的所有其他函数一样放在任何接口/类中


有人有主意吗?干杯

一般来说,您只需将文件与函数一起包含并执行即可。然后,您只需确保在代码执行之后,应该发生的事情就会发生。您更关心正在测试的代码的结果,而不是代码执行的过程

不过,如果需要模拟函数,可以使用名称空间(需要PHP5.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());
    }
}

你是说一个你还没有实现的函数,还是一个永远不会存在的函数,所以代码会错误地调用它?@gontrollez不,我只是指一个放在类之外的函数。包为我做的,谢谢!第二个解决方案似乎不错,即使没有在这里实现。