Zend_Test-PHPUnit-Db-Adapter.xml 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect2 id="zend.test.phpunit.db.adapter">
  5. <title>Utiliser l'adaptateur de tests</title>
  6. <para>
  7. Il peut être nécessaire quelques fois de vouloir tester l'application, mais sans base de données
  8. réelle physique. <classname>Zend_Test_DbAdapter</classname> offre des possibilités d'utiliser
  9. une implémentation de <classname>Zend_Db_Adapter_Abstract</classname> sans avoir à ouvrir une
  10. connexion vers une base physique. En plus, cet adaptateur est très facilement déguisable car
  11. aucun paramètre de constructeur n'est nécessaire.
  12. </para>
  13. <para>
  14. L'adaptateur de tests agit comme une pile pour des résultats de base. L'ordre des résultats
  15. doit être implémenté manuellement ce qui peut devenir assez complexe, mais cet adaptateur
  16. est très pratique dans le cas où un ensemble logique de requêtes est éxecuté et que vous
  17. connaissez l'ordre précis dans lequel les résultats doivent être retournés.
  18. </para>
  19. <programlisting language="php"><![CDATA[
  20. $adapter = new Zend_Test_DbAdapter();
  21. $stmt1Rows = array(array('foo' => 'bar'), array('foo' => 'baz'));
  22. $stmt1 = Zend_Test_DbStatement::createSelectStatement($stmt1Rows);
  23. $adapter->appendStatementToStack($stmt1);
  24. $stmt2Rows = array(array('foo' => 'bar'), array('foo' => 'baz'));
  25. $stmt2 = Zend_Test_DbStatement::createSelectStatement($stmt2Rows);
  26. $adapter->appendStatementToStack($stmt2);
  27. $rs = $adapter->query('SELECT ...'); // Retourne Statement 2
  28. while ($row = $rs->fetch()) {
  29. echo $rs['foo']; // Prints "Bar", "Baz"
  30. }
  31. $rs = $adapter->query('SELECT ...'); // Retourne Statement 1
  32. ]]></programlisting>
  33. <para>
  34. Le comportement des adaptateurs réels est simulé afin que des méthodes telles que
  35. <methodname>fetchAll()</methodname>, <methodname>fetchObject()</methodname>,
  36. <methodname>fetchColumn()</methodname> puissent fonctionner avec l'adaptateur de tests.
  37. </para>
  38. <para>
  39. Bien sûr, INSERT, UPDATE et DELETE peuvent être empilés aussi, mais vous ne pourrez alors tester
  40. que <methodname>$stmt->rowCount()</methodname> car ces types de requêtes ne retournent pas de
  41. résultats.
  42. </para>
  43. <programlisting language="php"><![CDATA[
  44. $adapter = new Zend_Test_DbAdapter();
  45. $adapter->appendStatementToStack(
  46. Zend_Test_DbStatement::createInsertStatement(1)
  47. );
  48. $adapter->appendStatementToStack(
  49. Zend_Test_DbStatement::createUpdateStatement(2)
  50. );
  51. $adapter->appendStatementToStack(
  52. Zend_Test_DbStatement::createDeleteStatement(10
  53. ));
  54. ]]></programlisting>
  55. <para>
  56. Par défaut, le profiler est activé pour que vous puissiez récupérer la requête éxecutée de manière
  57. textuelle, avec ses paramètres donc.
  58. </para>
  59. <programlisting language="php"><![CDATA[
  60. $adapter = new Zend_Test_DbAdapter();
  61. $stmt = $adapter->query("SELECT * FROM bugs");
  62. $qp = $adapter->getProfiler()->getLastQueryProfile();
  63. echo $qp->getQuerY(); // SELECT * FROM bugs
  64. ]]></programlisting>
  65. <para>
  66. L'adaptateur de test ne vérifie jamais si la requête spécifiée est réellement de type SELECT, DELETE,
  67. INSERT ou UPDATE. L'ordre exact de retour des données doit être spécifié manuellement dans l'adaptateur
  68. de tests.
  69. </para>
  70. <para>
  71. L'adaptateur de tests définit aussi les méthodes
  72. <methodname>listTables()</methodname>, <methodname>describeTables()</methodname> et
  73. <methodname>lastInsertId()</methodname>. De plus en utilisant
  74. <methodname>setQuoteIdentifierSymbol()</methodname> vous pouvez spécifier quel symbole
  75. utilisé pour l'échappement, par défaut aucun n'est utilisé.
  76. </para>
  77. </sect2>