有没有人有一个好的、有效的教程或书籍链接,可以帮我开始使用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,甚至是内存中的数组(只要能用就行)。
不幸的是,我似乎无法启动这个系统。
TRUNCATE
(擦除)表并填充它。显然,就是这样。没有神奇的持久连接,没有像《阿凡达》中那样的成长和梦想世界,也没有在临时数据集中嬉戏。到了一天结束时,我可以用CREATE TEMPORARY TABLE
做同样的事情,甚至更好,因为它维护关系。所以我想说类似于“不要浪费时间在这个糟糕的扩展上”,但由于我的经验有限,我不会这么说。 - BensetUp()
方法,那么你需要调用parent::setUp()
,否则数据库不会填充。而且在这个方法中,DbUnit将把你的PDO::ATTR_ERRMODE
提高到“exception”级别,即使你已经设置成了ERRMODE_SILENT
,你也会在不期望的地方收到异常。此外,我找不到API,所以你必须检查源代码或阅读书籍,这就像文档,但更长,并且隐藏在文字页面中的重要信息。/牢骚 - BenCREATE TEMPORARY TABLE
会维护关系,但实际上它不会维护外键。不过不用担心,只需使用CREATE TABLE
的变体即可达到同样的效果。 - Ben