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,甚至在内存中的阵列(无论是作品)
不幸的是,我似乎无法让这个系统启动。
经过大量的时间学习DbUnit之后,我希望有人告诉我,它基本上只是'TRUNCATE'(擦除)一个表,并用XML提供的自定义数据填充它。显然,就是这样。没有神奇的持久连接,没有阿凡达般的成长和梦想世界,并且通过临时数据集嬉戏。在一天结束时,我几乎可以用'CREATE TEMPORARY TABLE'做同样的事情,这更好,因为它维护着关系。所以我想说一些类似'不要浪费你的时间与这个蹩脚的扩展',但由于我有限的经验,我不会。 – Ben 2013-09-18 07:24:02
虽然我在这里,我会报告一些事情,我花了一段时间才弄清楚:如果你有一个'setUp()'方法,你需要调用'parent :: setUp()',否则数据库将不会填充。在该方法中,当它是'setUp()'时,DbUnit将“帮助”将你的'PDO :: ATTR_ERRMODE'提升到“异常”级别,所以即使你有'ERRMODE_SILENT',你也会在你不期待的地方他们。另外,我找不到API,因此您必须检查源代码,或者阅读与文档类似的书,但时间更长,并且重要的宝石隐藏在文本页面中。/ rant – Ben 2013-09-18 07:28:17
不好意思误导,上面我说'CREATE TEMPORARY TABLE'维护关系 - 实际上,它不会维护外键。不用担心,只需滚动CREATE TABLE变体即可完成同样的任务。 – Ben 2013-09-24 03:15:35