Zend_Test-PHPUnit-Bootstrapping.xml 4.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <!-- EN-Revision: 11497 -->
  2. <sect2 id="zend.test.phpunit.bootstrapping">
  3. <title>Amorcer votre TestCase</title>
  4. <para>Comme noté dans <link linkend="zend.test.phpunit.loginexample">l'exemple de login</link>, tous les tests MVC
  5. doivent étendre <classname>Zend_Test_PHPUnit_ControllerTestCase</classname>. Cette classe étend elle-même
  6. <code>PHPUnit_Framework_TestCase</code>, et vous fournit donc toute la structure et les assertions que vous attendez
  7. de PHPUnit - ainsi que quelques échafaudages et assertions spécifiques à l'implémentation MVC de Zend
  8. Framework.</para>
  9. <para>Si vous voulez tester votre application MVC, vous devez d'abord l'amorcer ("bootstrap"). Il existe plusieurs
  10. manières pour faire ceci, toutes celles-ci s'articulent autour de la propriété publique
  11. <code>$bootstrap</code>.</para>
  12. <para>Premièrement, vous pouvez paramétrer cette propriété pour qu'elle pointe vers un fichier. Si vous faîtes ceci,
  13. le fichier ne doit pas distribuer le contrôleur frontal, mais seulement paramétrer celui-ci et faire tout réglage
  14. spécifique à votre application.</para>
  15. <programlisting role="php"><![CDATA[
  16. class UserControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
  17. {
  18. public $bootstrap = '/chemin/vers/amorcage/fichier.php'
  19. // ...
  20. }
  21. ]]></programlisting>
  22. <para>Deuxièmement, vous pouvez fournir un callback PHP qui doit être exécuter pour amorcer votre application. Cet
  23. exemple est montré dans <link linkend="zend.test.phpunit.loginexample">l'exemple de login</link>. Si le callback est
  24. une fonction ou une méthode statique, ceci peut être paramétrer au niveau de la classe :</para>
  25. <programlisting role="php"><![CDATA[
  26. class UserControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
  27. {
  28. public $bootstrap = array('App', 'bootstrap');
  29. // ...
  30. }
  31. ]]></programlisting>
  32. <para>Dans le cas où une instance d'objet est nécessaire, nous recommandons de réaliser ceci dans votre méthode
  33. <code>setUp()</code> :</para>
  34. <programlisting role="php"><![CDATA[
  35. class UserControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
  36. {
  37. public function setUp()
  38. {
  39. // Utilisez la méthode "start" de l'instance d'objet Bootstrap :
  40. $bootstrap = new Bootstrap('test');
  41. $this->bootstrap = array($bootstrap, 'start');
  42. parent::setUp();
  43. }
  44. }
  45. ]]></programlisting>
  46. <para>Notez l'appel de <code>parent::setUp()</code>; ceci est nécessaire puisque la méthode <code>setUp()</code> de
  47. <classname>Zend_Test_PHPUnit_Controller_TestCase</classname> exécutera le reste du processus d'amorçage (incluant l'appel du
  48. callback).</para>
  49. <para>En utilisation normale, la méthode <code>setUp()</code> amorcera l'application. Ce premier processus inclue le
  50. nettoyage de l'environnement pour rendre un état de requête propre, va réinitialiser tout plugins ou aides, va
  51. réinitialiser l'instance du contrôleur frontal, et créer de nouveaux objets de requête et de réponse. Une fois ceci
  52. fait, la méthode va faire un <code>include</code> du fichier spécifié dans <code>$bootstrap</code>, ou appeler le
  53. callback spécifié.</para>
  54. <para>L'amorçage doit être le proche possible de ce que fera réellement votre application. Cependant, il y a
  55. plusieurs avertissements : </para>
  56. <itemizedlist>
  57. <listitem>
  58. <para>Ne fournissez pas d'implémentations alternatives des objets "Request" et "Response" ; ils ne seront
  59. pas utilisés. <classname>Zend_Test_PHPUnit_Controller_TestCase</classname> utilise des objets de requête et de réponse
  60. personnalisés, respectivement <classname>Zend_Controller_Request_HttpTestCase</classname> et
  61. <classname>Zend_Controller_Response_HttpTestCase</classname>. Ces objets fournissent des méthodes pour paramétrer
  62. l'environnement de requête dans le but souhaité, et récupérer les objets de réponse façonnés. </para>
  63. </listitem>
  64. <listitem>
  65. <para>N'espérez pas faire des tests spécifiques de serveur. Autrement dit, ces tests ne garantissent pas que
  66. le code va s'exécuter sur un serveur avec une configuration spécifique, mais simplement que l'application va
  67. fonctionner comme souhaité si le routeur est capable de router une requête donnée. À cet effet, ne
  68. paramétrez pas d'en-têtes spécifiques au serveur dans l'objet de requête.</para>
  69. </listitem>
  70. </itemizedlist>
  71. <para>Une fois que votre application est amorcée, vous pouvez commencer à écrire vos tests.</para>
  72. </sect2>