TL;DR: class_alias
を使う。
PHPUnit 5.7
\Awesome\GeartInterface
というインターフェースから \Awesome\MockClass
という名前でモッククラスを作成したい。
setMockClassName
で\Awesome\MockClass
を指定すると名前空間付のクラスは作成できないと怒られる。
$mock = $this->getMockBuilder(\Awesome\GeartInterface::class)
->setMockClassName('\Awesome\MockClass')
->getMock(); // => Error!
setMockClassNameには名前空間を指定できないので class_alias
で指定してやる。
$this->getMockBuilder(\Awesome\GeartInterface::class)
->getMock();
class_alias(get_class($mock), '\Awesome\MockClass');
$this->assertInstanceOf('\Awesome\MockClass', $mock); // => OK!
これ、CakePHP3のObjectRegistryを継承したクラスのテストで、任意のクラスがロードできることを保証するテストを書いたときに使ったです。