時々私のコードでは、特定のオブジェクトがインターフェースを実装しているかどうかを確認します:
if ($instance instanceof Interface) {};
しかし、PHPUnitで上記のインターフェースのモックを作成すると、そのテストに合格できないようです。
// class name is Mock_Interface_431469d7, does not pass above check
$instance = $this->getMock('Interface');
Interfaceという名前のクラスを持つことは、Interfaceを実装するクラスとは異なることを理解していますが、これに対処する方法がわかりません。
インターフェイスを実装する具象クラスをモックする必要がありますか?それは、移植性のためにインターフェースを使用する目的を無効にしませんか?
ありがとう
これは私にとってはうまくいきます:
$mock = $this->getMock('TestInterface');
$this->assertTrue($mock instanceof TestInterface);
たぶんそれはタイプミスですか、それとも$ instanceはあなたが思っているものではありませんか?
3.5.0現在、assertInstanceOfもあります。
例:
$this->assertInstanceOf('\Models\User', $this->userService->findById(1));
PhpUnit関数assertInstanceOfを使用します。
例:
$this->assertInstanceOf(ResponseInterface::class, $signInResponse);