2010-08-25 104 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