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