1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
<?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>
|