我遇到过PHPUnit的情况。我有一个类,其中包含一个包含非类方法的php文件。在我的课堂上,我有一个调用该函数的方法。以下是我的设置示例。
class foo
{
public function getInfo()
{
....
$this->GetFunctions();
$data = functionFromRequire();
....
}
public function getFunctions()
{
return require_once '/PATH/TO/FILE/functions.php';
}
}
PHPUnit getMock只模拟类函数。反正用PHPUnit来模拟非类函数吗? Google的结果似乎只是让我去嘲笑类功能。提前谢谢!
答案 0 :(得分:1)
简而言之,PHPUnit没有我可以找到的模拟命名空间的功能。我做了一些重构,正如@markdwhite建议的那样。我创建了一个包含旧文件的新类。然后在新创建的类中使用magic __call()和call_user_func_array()php函数。由于有太多的命名空间函数需要手动重做。希望它可以帮助别人!
答案 1 :(得分:0)
使用命名空间,您可以为functionFromRequire
测试替换函数getInfo
。但是,像在问题中那样明确地要求文件会使这很困难。
http://www.schmengler-se.de/en/2011/03/php-mocking-built-in-functions-like-time-in-unit-tests/
您可以将测试包装在同一名称空间中,然后将functionFromRequire
替换为您自己的将返回设置值的{{1}}。只要您没有指定函数的命名空间,就可以替换它,PHP就能够正确处理它。