PHPUnit 和 DBUnit - 入门 [关闭]

Posted

技术标签:

【中文标题】PHPUnit 和 DBUnit - 入门 [关闭]【英文标题】:PHPUnit and DBUnit - getting started [closed] 【发布时间】:2011-04-03 21:41:14 【问题描述】:

有没有人提供关于如何开始将 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】:

PHPUnit手册中有数据库测试一章:

http://phpunit.de/manual/current/en/database.html

和 B. Eberlei 的 PHPUnit 数据库测试终极指南

http://www.phpunit.de/manual/dbunit.txt(走了)

还有一篇由 PHPUnit 的作者 Sebastian Bergmann 撰写的关于该主题的博文(尽管是 2008 年):

Testing PHP/MySQL Applications with PHPUnit/DbUnit(已删除)

Mike Lively 的一些更早的博客文章,作者 DbUnit 扩展可以在以下位置找到

http://digitalsandwich.com/?s=dbunit

最近的教程(2010 年)将在 Matthew Turland 的博客中:

Database Testing with PHPUnit and MySQL

您也可以访问#phpunit on Freenode IRC获得官方支持。

【讨论】:

经过大量时间学习 DbUnit,我希望有人告诉我,它基本上只是 TRUNCATEs(擦除)一个表并使用您从 XML 提供的自定义数据填充它。显然,就是这样。没有神奇的持久连接,没有像阿凡达一样的成长和梦想世界,也没有在临时数据集中嬉戏。归根结底,我几乎可以用CREATE TEMPORARY TABLE 做同样的事情,这更好,因为它保持关系。所以我想说“不要在这个糟糕的扩展上浪费你的时间”,但由于我的经验有限,我不会。 当我在这里时,我将报告一些我花了一段时间才弄清楚的事情:如果你有一个 setUp() 方法,你需要调用 parent::setUp(),否则数据库不会填充。在这种方法中,当setUp()setUp() 时,DbUnit 将“有帮助地”将您的PDO::ATTR_ERRMODE 提升到“异常”级别,因此即使您有ERRMODE_SILENT,您也会在您不期望的地方遇到异常。另外,我找不到 API,所以你必须检查源代码,或者阅读这本书,这就像文档,但更长,重要的宝石隐藏在文本页面中。 /咆哮 抱歉误导,上面我说CREATE TEMPORARY TABLE维护关系-实际上,它不会维护外键。不过不用担心,只需滚动一个CREATE TABLE 变体即可完成同样的事情。 @Steve 这听起来有点令人失望,我对 DBUnit 抱有更高的希望(似乎是个好主意)。出于某种原因,也许这是一个坏主意,但如果每个这样的测试都在一个在拆卸阶段回滚的事务中执行一些查询,那么它的用处会增加 100 倍。

以上是关于PHPUnit 和 DBUnit - 入门 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

phpunit 中的 dbunit 不会截断表

如何将 PHPUnit 的 DBUnit 与 Microsoft SQL Server 数据库一起使用?

如何加快 PHPUnit + DBUnit 测试套件的执行速度?

如果重写setUp和tearDown,则不会调用PHP,phpunit和dbunit - getConnection和getDataSet

为啥我应该避免使用 DbUnit 来测试 MySQL?

xampp phpunit 怎么使用