PHPUnitで名前空間付きのモッククラスを作る

標準

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を継承したクラスのテストで、任意のクラスがロードできることを保証するテストを書いたときに使ったです。

コメントを残す

Page optimized by WP Minify WordPress Plugin