データベース・テスト・アダプタの使用
アプリケーションの一部を本当のデータベースでテストしたくなくても、
結合度のせいでせざるを得ないときもあります。
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() を使用して、
引用符で囲むために使用するべき記号を指定できます。既定では何も使用されません。