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, und möglicherweise am zielgerichtetsten, kann kein einfach eine Instanz von
Zend_Application erstellen wie man es in der
index.php machen würde, und diese der $bootstrap
Eigenschaft zuordnen. Typischerweise macht man das in der setUp()
Methode; man muss parent::setUp() aufrufen wenn man das getan hat:
bootstrap = new Zend_Application(
'testing',
APPLICATION_PATH . '/configs/application.ini'
);
parent::setUp();
}
}
]]>
Zweitens kann diese Eigenschaft so gesetzt werden das Sie auf eine Datei zeigt. Wenn das
getan wurde sollte diese Datei nicht den Front Controller ausführen,
aber stattdessen den Front Controller konfigurieren und alles was die Anwendung an
speziellen Dingen benötigt.
Drittens 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_ControllerTestCase 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_ControllerTestCase
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.