Zend_Test-PHPUnit-Db-Adapter.xml 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <!-- EN-Revision: 24249 -->
  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. 正しく実行されたか検査するために、
  63. 実行した SQL 文とそのバウンドされたパラメータを取得できます。
  64. </para>
  65. <programlisting language="php"><![CDATA[
  66. $adapter = new Zend_Test_DbAdapter();
  67. $stmt = $adapter->query("SELECT * FROM bugs");
  68. $qp = $adapter->getProfiler()->getLastQueryProfile();
  69. echo $qp->getQuerY(); // SELECT * FROM bugs
  70. ]]></programlisting>
  71. <para>
  72. テスト・アダプタは、指定されたクエリが本当に、
  73. スタックから次に返されるSELECT、DELETE、INSERTまたはUPDATEタイプかどうかは
  74. 決して調べません。
  75. データを返す正しい順位は、テスト・アダプタのユーザーによって実装されなければなりません。
  76. </para>
  77. <para>
  78. テスト・アダプタでは、
  79. <methodname>listTables()</methodname> 、 <methodname>describeTables()</methodname>
  80. 及び <methodname>lastInsertId()</methodname> メソッドの使用をシミュレーションするための
  81. メソッドの指定も行います。
  82. さらに、 <methodname>setQuoteIdentifierSymbol()</methodname> を使用して、
  83. 引用符で囲むために使用するべき記号を指定できます。既定では何も使用されません。
  84. </para>
  85. </sect2>