| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- Reviewed: no -->
- <!-- EN-Revision: 24249 -->
- <sect2 id="zend.test.phpunit.db.adapter">
- <title>データベース・テスト・アダプタの使用</title>
- <para>
- アプリケーションの一部を本当のデータベースでテストしたくなくても、
- 結合度のせいでせざるを得ないときもあります。
- <classname>Zend_Test_DbAdapter</classname> では、
- データベース接続を開始する必要なしに、
- <classname>Zend_Db_Adapter_Abstract</classname> の実装を使う便利な方法を提供します。
- さらに、それはコンストラクタ引数を必要としないので、
- このアダプタではPHPUnitテストスイート内から非常に簡単にモックアップを作れます。
- </para>
- <para>
- テスト・アダプタは、いろいろなデータベース結果のためのスタックとして動作します。
- 結果のその順序は実装したユーザー側の担当でなければいけません。
- そして、それは多くの異なるデータベース・クエリを呼ぶテストのための退屈な仕事であるかもしれません。
- しかし、少数のクエリだけが実行されるヘルパーが、テストにはまさに適切なヘルパーです。
- あなたはユーザー担当のコードに返されなければならない結果の正確な順序を知っています。
- </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>
- 本当のデータベース・アダプタいずれの振る舞いでも、
- できる限り <methodname>fetchAll()</methodname> 、 <methodname>fetchObject()</methodname> 、
- 及び <methodname>fetchColumn</methodname> などのように、
- そのようなメソッドができる限りテスト・アダプタとして動作するように
- シミュレーションされます。
- </para>
- <para>
- 結果スタックにINSERT、UPDATE及びDELETE命令を入れることもできます。
- しかしながらそれらは、
- <methodname>$stmt->rowCount()</methodname> の結果を指定できる命令だけを返します。
- </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>
- クエリ・プロファイラはデフォルトで有効で、
- 正しく実行されたか検査するために、
- 実行した SQL 文とそのバウンドされたパラメータを取得できます。
- </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>
- テスト・アダプタは、指定されたクエリが本当に、
- スタックから次に返されるSELECT、DELETE、INSERTまたはUPDATEタイプかどうかは
- 決して調べません。
- データを返す正しい順位は、テスト・アダプタのユーザーによって実装されなければなりません。
- </para>
- <para>
- テスト・アダプタでは、
- <methodname>listTables()</methodname> 、 <methodname>describeTables()</methodname>
- 及び <methodname>lastInsertId()</methodname> メソッドの使用をシミュレーションするための
- メソッドの指定も行います。
- さらに、 <methodname>setQuoteIdentifierSymbol()</methodname> を使用して、
- 引用符で囲むために使用するべき記号を指定できます。既定では何も使用されません。
- </para>
- </sect2>
|