Zend_Test-PHPUnit-Bootstrapping.xml 4.9 KB

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