PHPUnit les objets fantaisie et de la méthode de type hinting
Je suis en train de créer une maquette de l'objet de \SplObserver à l'aide de PHPunit et fixez la moqué objet d'un \SplSubject. Lorsque je tente de joindre le se moquaient de l'objet à une classe qui implémente \SplSubject, j'obtiens une erreur fatale en disant que la moqué objet de ne pas mettre en œuvre \SplObserver:
PHP Catchable fatal error: Argument 1 passed to ..\AbstractSubject::attach() must implement interface SplObserver, instance of PHPUnit_Framework_MockObject_Builder_InvocationMocker given, called in ../Decorator/ResultCacheTest.php on line 44 and defined in /users/.../AbstractSubject.php on line 49
Plus ou moins, voici le code:
//Edit: Using the fully qualified name doesn't work either
$observer = $this->getMock('SplObserver', array('update'))
->expects($this->once())
->method('update');
//Attach the mock object to the cache object and listen for the results to be set on cache
$this->_cache->attach($observer);
doSomethingThatSetsCache();
Je ne sais pas si cela fait une différence, mais je suis en utilisant PHP 5.3 et PHPUnit 3.4.9
Vous devez vous connecter pour publier un commentaire.
Mise à jour
Oh, en fait, le problème est assez simple, mais de toute façon difficile à repérer. Au lieu de:
Vous devez écrire:
C'est parce que
getMock()
renvoie une chose différente demethod()
, c'est pourquoi vous avez obtenu l'erreur. Vous avez passé le mauvais objet àattach
.Réponse originale à cette question
Je pense que vous avez entièrement qualifier le type de maquette: