Ich war über Unit-Tests lernen, und ich versuchte, das folgende Problem zu lösen:ZF2 Unit-Testing-Authentifizierung
Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for zfcUserAuthentication
... gegeben, die einzige Antwort, unter Verwendung von:
Simple ZF2 Unit Tests for a controller using ZfcUser
So Meine Setup-Funktion sieht gleich aus. Leider erhalte ich die Fehlermeldung:
Zend\Mvc\Exception\InvalidPluginException: Plugin of type Mock_ZfcUserAuthentication_868bf824 is invalid; must implement Zend\Mvc\Controller\Plugin\PluginInterface
Es wird in diesem Teil des Codes verursacht (aufgeteilt auf die gleiche Art und Weise in meinem Code nach oben):
$this -> controller->getPluginManager()
->setService('zfcUserAuthentication', $authMock); // Error refers to this line.
Das Objekt $ authMock ist offenbar nicht Implementieren von plugininterface, das ich implementieren muss, um in setService zu übergeben.
Ist $ authMock nicht für die Verwendung in Komponententests gedacht? Sollte ich eine andere (Unit-Testing-orientierte) setService-Methode verwenden?
Ich brauche eine Möglichkeit, die Anmeldung in meiner Anwendung zu behandeln, oder meine Unit-Tests sind sinnlos.
Vielen Dank für jeden Hinweis.
=== Edit (11.02.2013) ===
Ich wollte auf diesem Teil zur Klärung konzentrieren, wie ich denke, das ist das Problem Bereich ist:
// Getting mock of authentication object, which is used as a plugin.
$authMock = $this->getMock('ZfcUser\Controller\Plugin\ZfcUserAuthentication');
// Some expectations of the authentication service.
$authMock -> expects($this->any())
-> method('hasIdentity')
-> will($this->returnValue(true));
$authMock -> expects($this->any())
-> method('getIdentity')
-> will($this->returnValue($ZfcUserMock));
// At this point, PluginManager disallows mock being assigned as plugin because
// it will not implement plugin interface, as mentioned.
$this -> controller->getPluginManager()
->setService('zfcUserAuthentication', $authMock);
Wenn die Mock kümmert sich nicht um notwendige Implementierungen, wie sonst soll ich mich anmelden?
Ich korrigiere, dass es nicht notwendig ist, Controller zu testen, wie es Modelle sind? Ich finde, dass ich dort meinen gesamten Authentifizierungscode aufbewahre. – Shoreline
Ich habe kürzlich etwas Ähnliches ohne Probleme gemacht. Wie sieht Ihre komplette Testfallklasse aus? Wie sieht dein Test Bootstrap aus? Und schließlich die Aktion, die Sie versuchen zu testen. – Ruben
Verwenden Sie eine spezielle Anwendungskonfiguration beim Komponententest? In diesem Fall ist es möglich, dass das zfcUser-Modul nicht in der Testumgebung geladen ist. – SmasherHell