PHPUnit和DBUnit入门指南

11

有没有人有一个好的、有效的教程或书籍链接,可以帮我开始使用DBUnit层来添加到我的PHPUnit测试中?

我已经尝试过跟随代码

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,甚至是内存中的数组(只要能用就行)。

不幸的是,我似乎无法启动这个系统。

1个回答

9
在PHPUnit手册中有一章关于数据库测试的内容: 还有B. Eberlei的DB测试最终指南: PHPUnit作者Sebastian Bergmann也在2008年的博客文章中发布了相关主题: Mike Lively,DbUnit扩展的作者,甚至可以在他的博客文章中找到更早的帖子: Matthew Turland的博客中有一个更近期的教程(2010年): 您还可以访问Freenode IRC上的#phpunit获取官方支持。

2
在学习DbUnit的相当长一段时间后,我希望有人告诉我它基本上只是通过提供的XML自定义数据来TRUNCATE(擦除)表并填充它。显然,就是这样。没有神奇的持久连接,没有像《阿凡达》中那样的成长和梦想世界,也没有在临时数据集中嬉戏。到了一天结束时,我可以用CREATE TEMPORARY TABLE做同样的事情,甚至更好,因为它维护关系。所以我想说类似于“不要浪费时间在这个糟糕的扩展上”,但由于我的经验有限,我不会这么说。 - Ben
1
在这里,我要报告几件花费我很长时间才弄清楚的事情:如果你有setUp()方法,那么你需要调用parent::setUp(),否则数据库不会填充。而且在这个方法中,DbUnit将把你的PDO::ATTR_ERRMODE提高到“exception”级别,即使你已经设置成了ERRMODE_SILENT,你也会在不期望的地方收到异常。此外,我找不到API,所以你必须检查源代码或阅读书籍,这就像文档,但更长,并且隐藏在文字页面中的重要信息。/牢骚 - Ben
很抱歉之前我误导了,我说CREATE TEMPORARY TABLE会维护关系,但实际上它不会维护外键。不过不用担心,只需使用CREATE TABLE的变体即可达到同样的效果。 - Ben
@Steve 听起来有点令人失望,我对DBUnit抱有更高的期望(似乎是个好主意)。也许出于某些原因这是个坏主意,但如果每个这样的测试都在事务中执行一些查询,并在拆卸阶段回滚,那么它将更加有用100倍。 - Radu Murzea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接