PHPUnitの後処理でテーブルをTRUNCATEする
PHPUnitでテスト用のレコードを作成するのだが、テストで作成したレコードが残ってしまい再度テストを行うと失敗するという現象に遭遇した。
以下のようにAppTestCase
を作成してカスタマイズしている。setup()
メソッドで datasets
ディレクトリにymlファイルがあればその内容でデータを作成している。
1 | class AppTestCase extends PHPUnit_Extensions_Database_TestCase |
PHPUnitのドキュメントにはTRUNCATEが実行されると書いてあるが、TRUNCATEはテストデータが作成される前に行われるので最後に作成されたレコードは残ってしまう。
MySQLサーバのクエリログは以下。
ドキュメント通りデータが作成される前にTRUNCATEが実行されている。
1 | 2016-11-08T07:47:26.906619Z 26 Connect root@192.168.75.91 on app_test using TCP/IP |
テストを実行した後にTRUNCATEするには getTearDownOperation
メソッドを追加する。
1 | class AppTestCase extends PHPUnit_Extensions_Database_TestCase |
あとは各UnitTestのtearDown
メソッドで parent::tearDown()
を実行する。
1 |
|
以下が変更後のMySQLのクエリログだ。
最後にTRUNCATEが実行されている。
1 | 2016-11-08T08:43:49.367260Z 120 Connect root@192.168.75.91 on app_test using TCP/IP |