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