| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect2 id="zend.test.phpunit.db.adapter">
- <title>Utiliser l'adaptateur de tests</title>
- <para>
- Il peut être nécessaire quelques fois de vouloir tester l'application, mais sans base de données
- réelle physique. <classname>Zend_Test_DbAdapter</classname> offre des possibilités d'utiliser
- une implémentation de <classname>Zend_Db_Adapter_Abstract</classname> sans avoir à ouvrir une
- connexion vers une base physique. En plus, cet adaptateur est très facilement déguisable car
- aucun paramètre de constructeur n'est nécessaire.
- </para>
- <para>
- L'adaptateur de tests agit comme une pile pour des résultats de base. L'ordre des résultats
- doit être implémenté manuellement ce qui peut devenir assez complexe, mais cet adaptateur
- est très pratique dans le cas où un ensemble logique de requêtes est éxecuté et que vous
- connaissez l'ordre précis dans lequel les résultats doivent être retournés.
- </para>
- <programlisting language="php"><![CDATA[
- $adapter = new Zend_Test_DbAdapter();
- $stmt1Rows = array(array('foo' => 'bar'), array('foo' => 'baz'));
- $stmt1 = Zend_Test_DbStatement::createSelectStatement($stmt1Rows);
- $adapter->appendStatementToStack($stmt1);
- $stmt2Rows = array(array('foo' => 'bar'), array('foo' => 'baz'));
- $stmt2 = Zend_Test_DbStatement::createSelectStatement($stmt2Rows);
- $adapter->appendStatementToStack($stmt2);
- $rs = $adapter->query('SELECT ...'); // Retourne Statement 2
- while ($row = $rs->fetch()) {
- echo $rs['foo']; // Prints "Bar", "Baz"
- }
- $rs = $adapter->query('SELECT ...'); // Retourne Statement 1
- ]]></programlisting>
- <para>
- Le comportement des adaptateurs réels est simulé afin que des méthodes telles que
- <methodname>fetchAll()</methodname>, <methodname>fetchObject()</methodname>,
- <methodname>fetchColumn()</methodname> puissent fonctionner avec l'adaptateur de tests.
- </para>
- <para>
- Bien sûr, INSERT, UPDATE et DELETE peuvent être empilés aussi, mais vous ne pourrez alors tester
- que <methodname>$stmt->rowCount()</methodname> car ces types de requêtes ne retournent pas de
- résultats.
- </para>
- <programlisting language="php"><![CDATA[
- $adapter = new Zend_Test_DbAdapter();
- $adapter->appendStatementToStack(
- Zend_Test_DbStatement::createInsertStatement(1)
- );
- $adapter->appendStatementToStack(
- Zend_Test_DbStatement::createUpdateStatement(2)
- );
- $adapter->appendStatementToStack(
- Zend_Test_DbStatement::createDeleteStatement(10
- ));
- ]]></programlisting>
- <para>
- Par défaut, le profiler est activé pour que vous puissiez récupérer la requête éxecutée de manière
- textuelle, avec ses paramètres donc.
- </para>
- <programlisting language="php"><![CDATA[
- $adapter = new Zend_Test_DbAdapter();
- $stmt = $adapter->query("SELECT * FROM bugs");
- $qp = $adapter->getProfiler()->getLastQueryProfile();
- echo $qp->getQuerY(); // SELECT * FROM bugs
- ]]></programlisting>
- <para>
- L'adaptateur de test ne vérifie jamais si la requête spécifiée est réellement de type SELECT, DELETE,
- INSERT ou UPDATE. L'ordre exact de retour des données doit être spécifié manuellement dans l'adaptateur
- de tests.
- </para>
- <para>
- L'adaptateur de tests définit aussi les méthodes
- <methodname>listTables()</methodname>, <methodname>describeTables()</methodname> et
- <methodname>lastInsertId()</methodname>. De plus en utilisant
- <methodname>setQuoteIdentifierSymbol()</methodname> vous pouvez spécifier quel symbole
- utilisé pour l'échappement, par défaut aucun n'est utilisé.
- </para>
- </sect2>
|