Bootstrapping der eigenen TestCases
Wie im Login Beispiel gezeigt sollten alle
MVC Testcases Zend_Test_PHPUnit_ControllerTestCase erweitern. Diese Klasse ihrerseits
erweitert PHPUnit_Framework_TestCase, und gibt einem alle Strukturen und Ausnahmen
die man von PHPUnit erwartet -- sowie einiges an Scaffolding und Ausnahme spezifisches der
Zend Framework MVC Implementation.
Um die eigene MVC Anwendung zu testen muß diese ein Bootstrap ausführen. Es gibt verschiedene Wege
um das zu tun, wobei alle von Ihnen sich der öffentlichen $bootstrap Eigenschaft
bedienen.
Zuerst kann diese Eigenschaft so gesetzt werden das Sie auf eine Datei zeigt. Wenn das getan wurde
sollte diese Datei nicht den Front Kontroller ausführen, aber stattdessen den
Front Kontroller konfigurieren und alles was die Anwendung an speziellen Dingen benötigt.
Zweitens kann ein PHP Callback angegeben werden der nach dem Bootstrap der Anwendung ausgeführt wird.
Diese Methode kann im Login Beispiel gesehen
werden. Wenn das Callback eine Funktion oder statische Methode ist, könnte Sie auch in der Klasse
gesetzt werden:
In Fällen in denen eine Objekt Instanz notwendig ist, empfehlen wir die Durchführung in der eigenen
setUp() Methode:
bootstrap = array($bootstrap, 'start');
parent::setUp();
}
}
]]>
Beachte das parent::setUp() aufgerufen wird; das ist notwendig, da die setUp()
Methode von Zend_Test_PHPUnit_Controller_TestCase die Erinnerung des Bootstrap Prozesses
durchführen wird (was den Aufruf des Callbacks inkludiert).
Wärend der normalen Anwendung wird die setUp() Methode das Bootstrap der Anwendung
ausführen. Dieser Prozess wird zuerst das Löschen der Umgebung enthalten um einen reinen
Anfragestatus zu erhalten, das Resetieren jedes Plugins, Helfers und Antwort Objektes. Sobald das
getan wurde, wird sie anschließend die Datei laden(include) die in $bootstrap
spezifiziert wurde, oder den spezifizierten Callback aufrufen.
Das Bootstrappen sollte so nahe wie möglich daran sein wie die Anwendung das Bootstrap durchführt.
Trotzdem gibt es einige Fallstricke:
Wir bieten keine alternative Implementierung der Anfrage und Antwort Objekte; diese werden nicht
verwendet. Zend_Test_PHPUnit_Controller_TestCase verwendet eigene Anfrage und
Antwort Objekte, Zend_Controller_Request_HttpTestCase und
Zend_Controller_Response_HttpTestCase. Diese Objekte bieten Methoden für das
Konfigurieren der Anfrageumgebung auf gezieltem Wege an, und dem holen von Antwort Artefakten auf
speziellem Weg.
Man sollte nicht erwarten Server spezielles zu testen. In anderen Worten, die Tests garantieren
nicht das der Code in einer speziellen Serverkonfiguration läuft, aber das die Anwendung wie
erwartet funktionieren sollte, und der Router eine gegebene Anfrage routen kann. Um das
Abzuschließen sollten keine Server-speziellen Header im Anfrage Objekt gesetzt werden.
Sobald die Anwendung das Bootstrapping ausgeführt hat, kann damit begonnen werden eigene Tests zu
erstellen.