Zend_Test-PHPUnit-Bootstrapping.xml 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15157 -->
  3. <!-- Reviewed: no -->
  4. <sect2 id="zend.test.phpunit.bootstrapping">
  5. <title>Bootstrapping der eigenen TestCases</title>
  6. <para>
  7. Wie im <link linkend="zend.test.phpunit.loginexample">Login Beispiel</link> gezeigt sollten alle
  8. MVC Testcases <classname>Zend_Test_PHPUnit_ControllerTestCase</classname> erweitern. Diese Klasse ihrerseits
  9. erweitert <code>PHPUnit_Framework_TestCase</code>, und gibt einem alle Strukturen und Ausnahmen
  10. die man von PHPUnit erwartet -- sowie einiges an Scaffolding und Ausnahme spezifisches der
  11. Zend Framework MVC Implementation.
  12. </para>
  13. <para>
  14. Um die eigene MVC Anwendung zu testen muß diese ein Bootstrap ausführen. Es gibt verschiedene Wege
  15. um das zu tun, wobei alle von Ihnen sich der öffentlichen <code>$bootstrap</code> Eigenschaft
  16. bedienen.
  17. </para>
  18. <para>
  19. Zuerst kann diese Eigenschaft so gesetzt werden das Sie auf eine Datei zeigt. Wenn das getan wurde
  20. sollte diese Datei <emphasis>nicht</emphasis> den Front Kontroller ausführen, aber stattdessen den
  21. Front Kontroller konfigurieren und alles was die Anwendung an speziellen Dingen benötigt.
  22. </para>
  23. <programlisting role="php"><![CDATA[
  24. class UserControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
  25. {
  26. public $bootstrap = '/path/to/bootstrap/file.php'
  27. // ...
  28. }
  29. ]]></programlisting>
  30. <para>
  31. Zweitens kann ein PHP Callback angegeben werden der nach dem Bootstrap der Anwendung ausgeführt wird.
  32. Diese Methode kann im <link linkend="zend.test.phpunit.loginexample">Login Beispiel</link> gesehen
  33. werden. Wenn das Callback eine Funktion oder statische Methode ist, könnte Sie auch in der Klasse
  34. gesetzt werden:
  35. </para>
  36. <programlisting role="php"><![CDATA[
  37. class UserControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
  38. {
  39. public $bootstrap = array('App', 'bootstrap');
  40. // ...
  41. }
  42. ]]></programlisting>
  43. <para>
  44. In Fällen in denen eine Objekt Instanz notwendig ist, empfehlen wir die Durchführung in der eigenen
  45. <code>setUp()</code> Methode:
  46. </para>
  47. <programlisting role="php"><![CDATA[
  48. class UserControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
  49. {
  50. public function setUp()
  51. {
  52. // Verwende die 'start' Methode einer Bootstrap Objekt Instanz:
  53. $bootstrap = new Bootstrap('test');
  54. $this->bootstrap = array($bootstrap, 'start');
  55. parent::setUp();
  56. }
  57. }
  58. ]]></programlisting>
  59. <para>
  60. Beachte das <code>parent::setUp()</code> aufgerufen wird; das ist notwendig, da die <code>setUp()</code>
  61. Methode von <classname>Zend_Test_PHPUnit_Controller_TestCase</classname> die Erinnerung des Bootstrap Prozesses
  62. durchführen wird (was den Aufruf des Callbacks inkludiert).
  63. </para>
  64. <para>
  65. Wärend der normalen Anwendung wird die <code>setUp()</code> Methode das Bootstrap der Anwendung
  66. ausführen. Dieser Prozess wird zuerst das Löschen der Umgebung enthalten um einen reinen
  67. Anfragestatus zu erhalten, das Resetieren jedes Plugins, Helfers und Antwort Objektes. Sobald das
  68. getan wurde, wird sie anschließend die Datei <code>laden(include)</code> die in <code>$bootstrap</code>
  69. spezifiziert wurde, oder den spezifizierten Callback aufrufen.
  70. </para>
  71. <para>
  72. Das Bootstrappen sollte so nahe wie möglich daran sein wie die Anwendung das Bootstrap durchführt.
  73. Trotzdem gibt es einige Fallstricke:
  74. </para>
  75. <itemizedlist>
  76. <listitem><para>
  77. Wir bieten keine alternative Implementierung der Anfrage und Antwort Objekte; diese werden nicht
  78. verwendet. <classname>Zend_Test_PHPUnit_Controller_TestCase</classname> verwendet eigene Anfrage und
  79. Antwort Objekte, <classname>Zend_Controller_Request_HttpTestCase</classname> und
  80. <classname>Zend_Controller_Response_HttpTestCase</classname>. Diese Objekte bieten Methoden für das
  81. Konfigurieren der Anfrageumgebung auf gezieltem Wege an, und dem holen von Antwort Artefakten auf
  82. speziellem Weg.
  83. </para></listitem>
  84. <listitem><para>
  85. Man sollte nicht erwarten Server spezielles zu testen. In anderen Worten, die Tests garantieren
  86. nicht das der Code in einer speziellen Serverkonfiguration läuft, aber das die Anwendung wie
  87. erwartet funktionieren sollte, und der Router eine gegebene Anfrage routen kann. Um das
  88. Abzuschließen sollten keine Server-speziellen Header im Anfrage Objekt gesetzt werden.
  89. </para></listitem>
  90. </itemizedlist>
  91. <para>
  92. Sobald die Anwendung das Bootstrapping ausgeführt hat, kann damit begonnen werden eigene Tests zu
  93. erstellen.
  94. </para>
  95. </sect2>
  96. <!--
  97. vim:se ts=4 sw=4 et:
  98. -->