10
有沒有人有一個好的工作教程或書籍的鏈接如何開始將DBUnit圖層添加到我的PHPUNit測試?PHPUnit和DBUnit - 入門
我試過的代碼之後在
protected function getDatabaseTester()
{
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$connection = new PHPUnit_Extensions_Database_DB_DefaultDatabaseConnection($pdo);
$tester = new PHPUnit_Extensions_Database_DefaultTester($connection);
$tester->setSetUpOperation(PHPUnit_Extensions_Database_Operation_Factory::CLEAN_INSERT());
$tester->setTearDownOperation(PHPUnit_Extensions_Database_Operation_Factory::NONE());
/*
* the next line fails with the error
PHP Fatal error: __autoload(): Failed opening required 'PHPUnit_Extensions_Database_DataSet_FlatXMLDataSet.php' (include_path= ***
*/
$tester->setDataSet(new PHPUnit_Extensions_Database_DataSet_FlatXMLDataSet(dirname(__FILE__).'/../../../files/xml_database_export.xml'));
return $tester;
}
的XML創建通過的mysqldump命令。我很樂意使用CSV,甚至在內存中的陣列(無論是作品)
不幸的是,我似乎無法讓這個系統啓動。
經過大量的時間學習DbUnit之後,我希望有人告訴我,它基本上只是'TRUNCATE'(擦除)一個表,並用XML提供的自定義數據填充它。顯然,就是這樣。沒有神奇的持久連接,沒有阿凡達般的成長和夢想世界,並且通過臨時數據集嬉戲。在一天結束時,我幾乎可以用'CREATE TEMPORARY TABLE'做同樣的事情,這更好,因爲它維護着關係。所以我想說一些類似'不要浪費你的時間與這個蹩腳的擴展',但由於我有限的經驗,我不會。 – Ben 2013-09-18 07:24:02
雖然我在這裏,我會報告一些事情,我花了一段時間才弄清楚:如果你有一個'setUp()'方法,你需要調用'parent :: setUp()',否則數據庫將不會填充。在該方法中,當它是'setUp()'時,DbUnit將「幫助」將你的'PDO :: ATTR_ERRMODE'提升到「異常」級別,所以即使你有'ERRMODE_SILENT',你也會在你不期待的地方他們。另外,我找不到API,因此您必須檢查源代碼,或者閱讀與文檔類似的書,但時間更長,並且重要的寶石隱藏在文本頁面中。/ rant – Ben 2013-09-18 07:28:17
不好意思誤導,上面我說'CREATE TEMPORARY TABLE'維護關係 - 實際上,它不會維護外鍵。不用擔心,只需滾動CREATE TABLE變體即可完成同樣的任務。 – Ben 2013-09-24 03:15:35