代码之家  ›  专栏  ›  技术社区  ›  koen

具有命名空间的phpunit getmock()。

  •  7
  • koen  · 技术社区  · 15 年前

    我对开始在PHP中使用名称空间的追求一直在继续。这次phpunit给我带来了麻烦。我的setup()方法如下:

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

    getmock()方法只会导致php查找非持久存储类。不在命名空间内。

    问:要让getmock()方法在命名空间中查找类,需要更改什么?

    编辑:双反斜杠不是问题。还可以看到: the manual (报价)

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

    编辑:对我有效的是在回答伊格纳斯R的评论。

    3 回复  |  直到 12 年前
        1
  •  2
  •   Ignas R    15 年前

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

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

        2
  •  4
  •   Philipp Meier    14 年前

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

    $mock = $this->getMock('\MyNamespace\NonPersistentStorage');
    
        3
  •  -2
  •   cphp    14 年前

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