Testen eigener Controller und MVC Anwendungen Sobald man sein Bootstrap hat, kann man mit dem Testen beginnen. Testen funktioniert grundsätzlich wie man es in einer PHPUnit Test Suite erwarten würde, mit ein paar kleinen Unterschieden. Zuerst muß man eine URL die getestet werden soll ausführen, indem die dispatch() Methode des TestCases ausgeführt wird: dispatch('/'); // ... } } ]]> Es gibt trotzdem Zeiten, , in denen man zusätzliche Informationen angeben muß -- GET und POST Variablen, COOKIE Informationen, usw. Man kann die Anfrage mit diesen Informationen ausstatten: request->setQuery(array( 'foo' => 'bar', 'bar' => 'baz', )); // Setzt POST Variablen: $this->request->setPost(array( 'baz' => 'bat', 'lame' => 'bogus', )); // Setzt einen Cookie Wert: $this->request->setCookie('user', 'matthew'); // or many: $this->request->setCookies(array( 'timestamp' => time(), 'host' => 'foobar', )); // Setzt sogar Header: $this->request->setHeader('X-Requested-With', 'XmlHttpRequest'); // Setzt die Anfrage Methode: $this->request->setMethod('POST'); // Ausführung: $this->dispatch('/foo/bar'); // ... } } ]]> Jetzt wurde die Anfrage durchgeführt, es ist also Zeit Behauptungen zu prüfen. Controller Tests und der Redirector Action Helper Der Redirect Action Helper hat Probleme mit der exit() Anweisung wenn die gotoAndExit() Methode verwendet wird, und wird dann natürlich auch einen Test beenden der für diese Methode läuft. Um die eigene Anwendung testbar zu machen sollte diese Methode nicht am Redirector verwendet werden. Durch seine Natur führt das Redirector Action Helper Plugin ein Redirect aus und steigt nach diesem aus. Weil man Teile einer Anwendung nicht testen kann wenn diese Exit Aufrufe durchführen, schaltet Zend_Test_PHPUnit_ControllerTestCase den Exit Teil des Redirectors was zu unterschiedlichen Verhaltensweisen in Tests und echter Anwendung führen kann. Um sicherzustellen das der Redirect richtig arbeitet sollte man diesen auf folgendem Weg durchführen: _redirect(...); } else if($anotherCondition == true) { $this->_redirector->gotoSimple("foo"); return; } // Mach was } } ]]> Abhängig von der eigenen Anwendung kann es sein dass das nicht genug ist da eine zusätzliche preDispatch() oder postDispatch() Logik ausgeführt werden könnte. Das kann aktuell mit Zend_Test auf keine vernünftige Weise behandelt werden.