Zend_Test-PHPUnit-Bootstrapping.xml 5.9 KB

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