PHPUnit带命名空间的getMock()

时间:2009-08-11 18:16:02

标签: php namespaces phpunit

我在PHP中开始使用命名空间的任务仍在继续。这次PHPUnit给了我一些问题。我的setup()方法是这样的:

$test = new \MyNamespace\NonPersistentStorage(); // works
$mock = $this->getMock('\\MyNamespace\\NonPersistentStorage'); // doesn't work

getMock()方法只会导致PHP查找NonPersistentStorage类。不在命名空间内。

问:我需要更改什么才能让getMock()方法查找命名空间中的类?

编辑:双反斜杠不是问题。另见:the manual :(引用)

'在单引号字符串中,反斜杠转义序列使用起来更安全,但仍建议练习在所有字符串中转义反斜杠作为最佳实践。'

编辑:对我有用的是对Ignace R的回答的评论。

3 个答案:

答案 0 :(得分:4)

改为使用此字符串(不带双反斜杠):

$mock = $this->getMock('\MyNamespace\NonPersistentStorage');

答案 1 :(得分:2)

对类的字符串引用通常没有前导反斜杠。尝试删除它并告诉我们它是否有效。

编辑:,如果没有,请尝试class_alias在该类的全局命名空间中创建别名。但是,这将是一个丑陋的解决方案......

答案 2 :(得分:-2)

我认为您可以解决您的问题,包括测试文件中的类\ MyNamespace \ NonPersistentStorage。