tanaka's Programming Memo

プログラミングについてのメモ。

PHPUnit DBUnit のテストでハマったことなどメモ

データベースのテストを行うには、PHPUnitのエクステンションであるDBUnitを利用することができます。

PHPUnit マニュアル – 第8章 データベースのテスト

インストール

ComposerでDBUnitをインストールします。composer.jsonの"require-dev"に、以下を追加します。

"phpunit/dbunit": ">=1.2"

追加したら、 composer update してインストール環境を更新。

継承するクラス

  • PHPUnit_Framework_TestCase ではなく、 PHPUnit_Extensions_Database_TestCase を継承
  • $this->assertEquals()などはそのまま利用できる

必要なメソッド

  • public function getConnection()
    • テスト対象のデータベースへのPDOの接続を定義
    • テストごとに毎回実行される
    • staticでPDOのインスタンスを、pdoの接続をインスタンス変数に記録して、再生成を抑制することができる
  • public function getDataSet()
    • 最初に1度だけ実行
    • データセットをreturnすると、テストのデータベースをその内容に書き換える

DBUnitのgetDataSetが機能しない

テスト開始時に、自動的にTRUNCATEやデータセットが設定されない場合は、setUp()メソッドを実装している可能性があります。

setUp()メソッドはテスト開始時の初期化を行うメソッドですが、これがあるとgetDataSet()が正しく機能しないようです。

設定の変更

開発や本番など、データベースの接続条件を変更したい場合は、bootstrap.xmlを利用すると良いです。

詳しくは、PHPUnit マニュアル – 第8章 データベースのテストの「ヒント: 自前でのデータベーステストケースの抽象化」を参照。

データセット

  • YAMLが便利
  • インデントは空白1つずつで良い