3

PHPUnit のデータベース拡張機能を使用するテスト ケースを作成しようとしています。私は公式ドキュメントとMike Livelyのこの投稿に従いましたが、PHPUnitは不平を言い続けています:

1) ClearanceProfileTest::testFetchPrivileges
PHPUnit_Extensions_Database_Operation_Exception: COMPOSITE[TRUNCATE] operation failed on query:
            DELETE FROM "profile_privilege_mappings"
         using args: Array
(
)
[SQLSTATE[HY000]: General error: 1 no such table: profile_privilege_mappings]

データベース スキーマが設定されていないためにエラーが発生したと思われますが、それをロードする方法が見つかりません。.sqlファイルの内容を読み込んで PDO クエリとして実行しようとしましたが、何もしませんでした。

ここに私のテストケースコードがあります:

class ClearanceProfileTest extends PHPUnit_Extensions_Database_TestCase
{
  /**
   * @return PHPUnit_Extensions_Database_DB_IDatabaseConnection
   */
  public function getConnection() {
    $pdo = new PDO('sqlite::memory:');
    return $this->createDefaultDBConnection($pdo, ':memory:');
  }

  /**
   * @return PHPUnit_Extensions_Database_DataSet_IDataSet
   */
  protected function getDataSet() {
    $yaml = dirname(__FILE__) . "/ClearanceProfileTestDataset.yml";
    $dataset = new PHPUnit_Extensions_Database_DataSet_YamlDataSet($yaml);
    return $dataset;
  }
  public function testFetchPrivileges()  {
    $cp = ClearanceProfile::retrieve_one('id = ?', 1);
    $privileges = $cp->fetchPrivileges();
    $this->assertEquals(count($privileges), 1);
  }
}
4

1 に答える 1

8

デフォルトの実装では、データベース エクステンションは、getDataSet によって返されたデータセットを使用して、データベースに対して「クリーン インサート」操作を実行します。クリーン挿入操作では、データ セット内のすべてのテーブル (データベース内のすべてのテーブルではありません) が切り捨てられ、データセットに行が挿入されます。解決策は、テストを実行する前にテーブルを作成することです。

getSetUpOperation()さらに、 メソッドとgetTearDownOperation()メソッドをオーバーライドすることで、デフォルトの機能を変更できます。

于 2012-11-05T09:53:16.520 に答える