Utiliser l'adaptateur de tests Il peut être nécessaire quelques fois de vouloir tester l'application, mais sans base de données réelle physique. Zend_Test_DbAdapter offre des possibilités d'utiliser une implémentation de Zend_Db_Adapter_Abstract 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. 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. '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 ]]> Le comportement des adaptateurs réels est simulé afin que des méthodes telles que fetchAll(), fetchObject(), fetchColumn() puissent fonctionner avec l'adaptateur de tests. Bien sûr, INSERT, UPDATE et DELETE peuvent être empilés aussi, mais vous ne pourrez alors tester que $stmt->rowCount() car ces types de requêtes ne retournent pas de résultats. appendStatementToStack( Zend_Test_DbStatement::createInsertStatement(1) ); $adapter->appendStatementToStack( Zend_Test_DbStatement::createUpdateStatement(2) ); $adapter->appendStatementToStack( Zend_Test_DbStatement::createDeleteStatement(10 )); ]]> 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. query("SELECT * FROM bugs"); $qp = $adapter->getProfiler()->getLastQueryProfile(); echo $qp->getQuerY(); // SELECT * FROM bugs ]]> 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. L'adaptateur de tests définit aussi les méthodes listTables(), describeTables() et lastInsertId(). De plus en utilisant setQuoteIdentifierSymbol() vous pouvez spécifier quel symbole utilisé pour l'échappement, par défaut aucun n'est utilisé.