我在PHP中开始使用命名空间的任务仍在继续。这次PHPUnit给了我一些问题。我的setup()方法是这样的:
$test = new \MyNamespace\NonPersistentStorage(); // works
$mock = $this->getMock('\\MyNamespace\\NonPersistentStorage'); // doesn't work
getMock()方法只会导致PHP查找NonPersistentStorage类。不在命名空间内。
问:我需要更改什么才能让getMock()方法查找命名空间中的类?
编辑:双反斜杠不是问题。另见:the manual :(引用)
'在单引号字符串中,反斜杠转义序列使用起来更安全,但仍建议练习在所有字符串中转义反斜杠作为最佳实践。'
编辑:对我有用的是对Ignace R的回答的评论。
答案 0 :(得分:4)
改为使用此字符串(不带双反斜杠):
$mock = $this->getMock('\MyNamespace\NonPersistentStorage');
答案 1 :(得分:2)
对类的字符串引用通常没有前导反斜杠。尝试删除它并告诉我们它是否有效。
编辑:,如果没有,请尝试class_alias在该类的全局命名空间中创建别名。但是,这将是一个丑陋的解决方案......
答案 2 :(得分:-2)
我认为您可以解决您的问题,包括测试文件中的类\ MyNamespace \ NonPersistentStorage。