# 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.

    $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

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.

    $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
    ));

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.

    $adapter = new Zend_Test_DbAdapter();
    $stmt = $adapter->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é.