PHPUnitのDBUnit拡張をPHPUnitの外側で使う
DBUnitにはXML、YAML、CSVや任意のSQLを使ってDataSetを定義し、それらをINSERT、DELETE、UPDATE、TRUNCATEする機能があります。
これらの機能をPHPUnitを使わずに呼び出すこともできます。
<?php require_once "PHPUnit/Extensions/Database/Autoload.php"; $db = new PDO(DSN, DB_USER, DB_PASS); $con = new PHPUnit_Extensions_Database_DB_DefaultDatabaseConnection($db); $tester = new PHPUnit_Extensions_Database_DefaultTester($con); $tester->setSetUpOperation(PHPUnit_Extensions_Database_Operation_Factory::CLEAN_INSERT()); $tester->setDataSet( new PHPUnit_Extensions_Database_DataSet_YamlDataSet(__DIR__ . '/_file/test_data.yaml') ); $tester->onSetUp();
$tester->onSetUp()を呼び出すと、テーブルをTRUNCATEしてからINSERTします(CLEAN_INSERT)。PHPUnit_Extensions_Database_Operation_Factoryには他にINSERT、TRUNCATE、DELETE、DELETE_ALL、UPDATEがあります。また、PHPUnit_Extensions_Database_Operation_Compositeを使って複数のOperationを組み合わせることもできます。
あと$tester->setTearDownOperation()でセットしたOperationは、$tester->onTearDown()で呼び出すことができます。この辺はたぶんこの本が一番詳しい
Real-World Solutions for Developing High-Quality PHP Frameworks and Applications
- 作者: Sebastian Bergmann,Stefan Priebsch
- 出版社/メーカー: Wrox
- 発売日: 2011/05/10
- メディア: ペーパーバック
- クリック: 10回
- この商品を含むブログ (1件) を見る
DefaultTesterを使わずに呼び出すこともできそうです。
<?php require_once "PHPUnit/Extensions/Database/Autoload.php"; $db = new PDO(DSN, DB_USER, DB_PASS); $con = new PHPUnit_Extensions_Database_DB_DefaultDatabaseConnection($db); $dataSet = new PHPUnit_Extensions_Database_DataSet_YamlDataSet(__DIR__ . '/_file/test_data.yaml'); $operation = PHPUnit_Extensions_Database_Operation_Factory::CLEAN_INSERT(); $operation->execute($con, $dataSet);