web-dev-qa-db-fra.com

PHPUnit, interfaces simulées et instanceof

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

37
Bryan M.

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?

41
martinvium

il existe également assertInstanceOf à partir du 3.5.0

Exemple:

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

Utilisez la fonction PhpUnit assertInstanceOf.

Exemple:

$this->assertInstanceOf(ResponseInterface::class, $signInResponse);
0
Йося Гисем