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 数据库测试终极指南
还有一篇由 PHPUnit 的作者 Sebastian Bergmann 撰写的关于该主题的博文(尽管是 2008 年):
Mike Lively 的一些更早的博客文章,作者 DbUnit 扩展可以在以下位置找到
http://digitalsandwich.com/?s=dbunit最近的教程(2010 年)将在 Matthew Turland 的博客中:
Database Testing with PHPUnit and MySQL您也可以访问#phpunit on Freenode IRC获得官方支持。
【讨论】:
经过大量时间学习 DbUnit,我希望有人告诉我,它基本上只是TRUNCATE
s(擦除)一个表并使用您从 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 与 Microsoft SQL Server 数据库一起使用?
如何加快 PHPUnit + DBUnit 测试套件的执行速度?
如果重写setUp和tearDown,则不会调用PHP,phpunit和dbunit - getConnection和getDataSet