| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 17054 -->
- <!-- Reviewed: no -->
- <sect2 id="zend.test.phpunit.db.adapter">
- <title>Verwenden des Datenbank Test Adapters</title>
- <para>
- Es gibt Zeiten in denen man Teile der eigenen Anwendung nicht mit einer echten Datenbank
- testen will, aber wegen einer Kopplung dazu gezwungen ist.
- <classname>Zend_Test_DbAdapter</classname> bietet einen bequemen Weg um eine Implementation
- von <classname>Zend_Db_Adapter_Abstract</classname> zu verwenden ohne das eine Datenbank
- Verbindung geöffnet werden muß. Weiters ist dieser Adapter einfach von innerhalb der
- PHPUnit Testsuite zu verwenden, da er keine Constructor Argumente benötigt.
- </para>
- <para>
- Der Test Adapter agiert als Stack für die verschiedenen Datenbank Ergebnisse. Die
- Reihenfolge der Ergebnisse muß auf Benutzerebene implementiert werden, was für Tests die
- viele unterschiedliche Datenbank Abfragen aufrufen ein arbeitsintensiver Task sein kann,
- aber er ist der richtige Helfer für Tests in denen nur eine Handvoll von Abfragen
- ausgeführt werden und man die exakte Reihenfolge der Ergebnisse kennt die vom
- Benutzerbezogenen Code zurückgegeben wird.
- </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 ...'); // Returns Statement 2
- while ($row = $rs->fetch()) {
- echo $rs['foo']; // Prints "Bar", "Baz"
- }
- $rs = $adapter->query('SELECT ...'); // Returns Statement 1
- ]]></programlisting>
- <para>
- Das Verhalten jedes realen Datenbank Adapters wird soweit wie möglich simuliert sodas
- dessen Methoden, wie <methodname>fetchAll()</methodname>,
- <methodname>fetchObject()</methodname>, <methodname>fetchColumn</methodname> und weitere
- für den Test Adapter funktionieren.
- </para>
- <para>
- Man kann auch INSERT, UPDATE und DELETE Anweisungen im Ergebnis Stack platzieren, wobei
- diese nur ein Ergebnis zurückgeben das es erlaubt das Ergebnis von
- <methodname>$stmt->rowCount()</methodname> zu spezifizieren.
- </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>
- Der Test Adapter prüft niemals ob die spezifizierte Anfrage die als nächstes vom Stack
- zurückgegeben wird wirklich vom Typ SELECT, DELETE, INSERT oder UPDATE ist. Die richtige
- Reihenfolge der zurückgegebenen Daten muss vom Benutzer des Test Adapters implementiert
- werden.
- </para>
- <para>
- Der Test Adapter spezifiziert auch Methoden um die Verwendung der Methoden
- <methodname>listTables()</methodname>, <methodname>describeTables()</methodname> und
- <methodname>lastInsertId()</methodname> simuliert.
- </para>
- </sect2>
|