2010-08-25 51 views
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,甚至在內存中的陣列(無論是作品)

不幸的是,我似乎無法讓這個系統啓動。

回答

9

有一章數據庫測試中的PHPUnit手冊:

和B Eberlei的終極指南DB測試PHPUnit的

還有一個博客帖子通過PHPUnit的關於該主題的作者塞巴斯蒂安·貝格曼(2008年雖然):

一些更老的博客文章由Mike活潑,筆者DbUnit的擴展可以在

找到

一個更近的教程(2010)將是馬修Turland的博客:

您也可以訪問#phpunit on Freenode IRC得到官方支持。

+2

經過大量的時間學習DbUnit之後,我希望有人告訴我,它基本上只是'TRUNCATE'(擦除)一個表,並用XML提供的自定義數據填充它。顯然,就是這樣。沒有神奇的持久連接,沒有阿凡達般的成長和夢想世界,並且通過臨時數據集嬉戲。在一天結束時,我幾乎可以用'CREATE TEMPORARY TABLE'做同樣的事情,這更好,因爲它維護着關係。所以我想說一些類似'不要浪費你的時間與這個蹩腳的擴展',但由於我有限的經驗,我不會。 – Ben 2013-09-18 07:24:02

+1

雖然我在這裏,我會報告一些事情,我花了一段時間才弄清楚:如果你有一個'setUp()'方法,你需要調用'parent :: setUp()',否則數據庫將不會填充。在該方法中,當它是'setUp()'時,DbUnit將「幫助」將你的'PDO :: ATTR_ERRMODE'提升到「異常」級別,所以即使你有'ERRMODE_SILENT',你也會在你不期待的地方他們。另外,我找不到API,因此您必須檢查源代碼,或者閱讀與文檔類似的書,但時間更長,並且重要的寶石隱藏在文本頁面中。/ rant – Ben 2013-09-18 07:28:17

+0

不好意思誤導,上面我說'CREATE TEMPORARY TABLE'維護關係 - 實際上,它不會維護外鍵。不用擔心,只需滾動CREATE TABLE變體即可完成同樣的任務。 – Ben 2013-09-24 03:15:35