web-dev-qa-db-ja.com

PHPUnit、モックされたインターフェース、instanceof

時々私のコードでは、特定のオブジェクトがインターフェースを実装しているかどうかを確認します:

if ($instance instanceof Interface) {};

しかし、PHPUnitで上記のインターフェースのモックを作成すると、そのテストに合格できないようです。

 // class name is Mock_Interface_431469d7, does not pass above check
 $instance = $this->getMock('Interface'); 

Interfaceという名前のクラスを持つことは、Interfaceを実装するクラスとは異なることを理解していますが、これに対処する方法がわかりません。

インターフェイスを実装する具象クラスをモックする必要がありますか?それは、移植性のためにインターフェースを使用する目的を無効にしませんか?

ありがとう

37
Bryan M.

これは私にとってはうまくいきます:

$mock = $this->getMock('TestInterface');
$this->assertTrue($mock instanceof TestInterface);

たぶんそれはタイプミスですか、それとも$ instanceはあなたが思っているものではありませんか?

41
martinvium

3.5.0現在、assertInstanceOfもあります。

例:

$this->assertInstanceOf('\Models\User', $this->userService->findById(1));
47

PhpUnit関数assertInstanceOfを使用します。

例:

$this->assertInstanceOf(ResponseInterface::class, $signInResponse);
0