Parfois, dans mon code, je vais vérifier si un objet particulier implémente une interface:
if ($instance instanceof Interface) {};
Cependant, en créant des simulations de ladite interface dans PHPUnit, je n'arrive pas à passer ce test.
// class name is Mock_Interface_431469d7, does not pass above check
$instance = $this->getMock('Interface');
Je comprends qu'avoir une classe nommée Interface est différent d'une classe implémentant Interface, mais je ne sais pas comment y faire face.
Suis-je obligé de me moquer d'une classe concrète qui implémente Interface? Cela n'irait-il pas à l'encontre de l'objectif d'utiliser une interface pour la portabilité?
Merci
Cela fonctionne pour moi:
$mock = $this->getMock('TestInterface');
$this->assertTrue($mock instanceof TestInterface);
Peut-être que c'est une faute de frappe ou peut-être que $ instance n'est pas ce que vous pensez que c'est?
il existe également assertInstanceOf à partir du 3.5.0
Exemple:
$this->assertInstanceOf('\Models\User', $this->userService->findById(1));
Utilisez la fonction PhpUnit assertInstanceOf.
Exemple:
$this->assertInstanceOf(ResponseInterface::class, $signInResponse);