在 PHPUnit 的不同命名空间中创建 class 的模拟

Create a mock of a class in a different namespace in PHPUnit

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

    $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

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

目前您无法在模拟 class 中指定命名空间。 是一个 open issue.

The setMockClassName() method does not expect a namespace because PHPUnit automatically creates mocks in the same namespace as the class being mocked. We should probably add some validation here so you don't see the PHP error, though.

在 github 问题中讨论了相同的解决方法,请检查是否有适合您的方法。然而,这(在同一个命名空间中)不会产生任何错误:

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

}

希望对您有所帮助