Zend_Test-PHPUnit-Db-Adapter.xml 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <!-- EN-Revision: 17054 -->
  4. <sect2 id="zend.test.phpunit.db.adapter">
  5. <title>データベース・テスト・アダプタの使用</title>
  6. <para>
  7. アプリケーションの一部を本当のデータベースでテストしたくなくても、
  8. 結合度のせいでせざるを得ないときもあります。
  9. <classname>Zend_Test_DbAdapter</classname>では、
  10. データベース接続を開始する必要なしに、
  11. <classname>Zend_Db_Adapter_Abstract</classname>の実装を使う便利な方法を提供します。
  12. さらに、それはコンストラクタ引数を必要としないので、
  13. このアダプタではPHPUnitテストスイート内から非常に簡単にモックアップを作れます。
  14. </para>
  15. <para>
  16. テスト・アダプタは、いろいろなデータベース結果のためのスタックとして動作します。
  17. 結果のその順序は実装したユーザー側の担当でなければいけません。
  18. そして、それは多くの異なるデータベース・クエリを呼ぶテストのための退屈な仕事であるかもしれません。
  19. しかし、少数のクエリだけが実行されるヘルパーが、テストにはまさに適切なヘルパーです。
  20. あなたはユーザー担当のコードに返されなければならない結果の正確な順序を知っています。
  21. </para>
  22. <programlisting language="php"><![CDATA[
  23. $adapter = new Zend_Test_DbAdapter();
  24. $stmt1Rows = array(array('foo' => 'bar'), array('foo' => 'baz'));
  25. $stmt1 = Zend_Test_DbStatement::createSelectStatement($stmt1Rows);
  26. $adapter->appendStatementToStack($stmt1);
  27. $stmt2Rows = array(array('foo' => 'bar'), array('foo' => 'baz'));
  28. $stmt2 = Zend_Test_DbStatement::createSelectStatement($stmt2Rows);
  29. $adapter->appendStatementToStack($stmt2);
  30. $rs = $adapter->query('SELECT ...'); // Returns Statement 2
  31. while ($row = $rs->fetch()) {
  32. echo $rs['foo']; // Prints "Bar", "Baz"
  33. }
  34. $rs = $adapter->query('SELECT ...'); // Returns Statement 1
  35. ]]></programlisting>
  36. <para>
  37. 本当のデータベース・アダプタいずれの振る舞いでも、
  38. できる限り<methodname>fetchAll()</methodname>、<methodname>fetchObject()</methodname>、
  39. 及び<methodname>fetchColumn</methodname>などのように、
  40. そのようなメソッドができる限りテスト・アダプタとして動作するように
  41. シミュレーションされます。
  42. </para>
  43. <para>
  44. 結果スタックにINSERT、UPDATE及びDELETE命令を入れることもできます。
  45. しかしながらそれらは、
  46. <methodname>$stmt->rowCount()</methodname>の結果を指定できる命令だけを返します。
  47. </para>
  48. <programlisting language="php"><![CDATA[
  49. $adapter = new Zend_Test_DbAdapter();
  50. $adapter->appendStatementToStack(
  51. Zend_Test_DbStatement::createInsertStatement(1)
  52. );
  53. $adapter->appendStatementToStack(
  54. Zend_Test_DbStatement::createUpdateStatement(2)
  55. );
  56. $adapter->appendStatementToStack(
  57. Zend_Test_DbStatement::createDeleteStatement(10
  58. ));
  59. ]]></programlisting>
  60. <para>
  61. テスト・アダプタは、指定されたクエリが本当に、
  62. スタックから次に返されるSELECT、DELETE、INSERTまたはUPDATEタイプかどうかは
  63. 決して調べません。
  64. データを返す正しい順位は、テスト・アダプタのユーザーによって実装されなければなりません。
  65. </para>
  66. <para>
  67. テスト・アダプタでは、
  68. <methodname>listTables()</methodname>や<methodname>describeTables()</methodname>
  69. そして<methodname>lastInsertId()</methodname>メソッドを使用をシミュレーションするために、
  70. メソッドも指定します
  71. </para>
  72. </sect2>