在PHPUnit中的不同命名空间中创建一个类的模拟

时间:2015-04-07 11:10:06

标签: php unit-testing mocking phpunit

我想在不同的命名空间中创建一个类的模拟。我尝试了以下代码

    $fake = $this->getMockClass( __NAMESPACE__ . '\FakeTestBlock', array(), array(), '\NewNameSpace\GlobalFakeTestBlock' );

但是我收到以下错误

PHPUnit_Framework_Exception: Parse error: parse error, expecting `"identifier (T_STRING)"' in /path/to/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Generator.php(335) : eval()'d code on line 1

有没有办法在不同的命名空间中创建模拟?

1 个答案:

答案 0 :(得分:2)

目前,您无法在模拟类中指定命名空间。 是open issue

  

setMockClassName()方法不期望命名空间,因为   PHPUnit自动在与类相同的命名空间中创建模拟   被嘲笑。我们应该在这里添加一些验证,这样你就不会   但是,请参阅PHP错误。

在github问题中讨论相同的解决方法,检查一些东西对你有用。但是(在相同的命名空间中)不会出现任何错误:

public function testMockedNameSpace()
{
    $fake = $this
             ->getMockBuilder('Acme\DemoBundle\Tests\GlobalFakeTestBlock')
             ->setMockClassName('FakeTestBlock')
             ->getMock();

}

希望这个帮助