如何在PHP单元测试中处理对未定义函数的调用
我对单元测试比较陌生,所以也许有人可以在这里帮助我 问题 在终端中执行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()预定义应该返回的内容,但遗憾的是,该函数没有像我目前测试的
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不,我只是指一个放在类之外的函数。包为我做的,谢谢!第二个解决方案似乎不错,即使没有在这里实现。