Parfois, dans mon code, je vais vérifier pour voir si un objet particulier implémente une interface:PHPUnit, interfaces moqué et instanceof
if ($instance instanceof Interface) {};
Toutefois, la création se moque de ladite interface dans PHPUnit, je ne peux pas semblent passer ce test.
// class name is Mock_Interface_431469d7, does not pass above check
$instance = $this->getMock('Interface');
Je comprends que d'avoir une classe interface nommée est différente d'une classe qui implémente l'interface, mais je ne suis pas sûr de savoir comment se faire face. Est-ce que je suis obligé de simuler une classe concrète qui implémente Interface? Cela ne va-t-il pas à l'encontre de l'objectif d'utiliser une interface pour la portabilité?
Merci
Yep, la tête froide prévalent. Après une nuit de sommeil complet, je me suis rendu compte que je n'utilisais pas l'espace de noms pleinement qualifié lorsque je me moquais de l'objet. –
Cas d'utilisation légèrement différent, mais puis-je vérifier si une instance est une instance d'une classe ou d'un simulacre de la classe. – kapad
@kapad Vous voyez, c'est le point principal du polymorphisme que vous n'avez pas besoin de savoir si l'objet courant est et l'instance de classe ou un simulacre. Si vous avez encore besoin de savoir, alors vous faites quelque chose de mal. P.S. Juste pour info, vous pouvez utiliser la fonction [get_class] (http://ca1.php.net/manual/fr/function.get-class.php) pour connaître le nom exact de la classe de l'objet – dVaffection