是否可以在PHPUnit上加载多个平面xml数据集以加载大量灯具?
我们正在编写一个相当复杂的应用程序,并且xml数据集变得非常大,所以我想将它放到2-3 xml中。
以下是测试用例的当前代码:
<?php
class My_TestBase extends Zend_Test_PHPUnit_DatabaseTestCase{
/**
* Zend_Application
* @var Zend_Application
*/
protected $_application;
/**
* Connection
*
* @var Zend_Test_PHPUnit_Db_Connection
*/
private $_connection;
/**
* Returns the test database connection.
*
* @link http://framework.zend.com/wiki/display/ZFPROP/Zend_Test_PHPUnit_Database+-+Benjamin+Eberlei
* @return PHPUnit_Extensions_Database_DB_IDatabaseConnection
*/
protected function getConnection(){
if($this->_connection === null){
$Resources = $this->_application->getOption("resources");
$conn = Zend_Db::factory($Resources["db"]["adapter"], $Resources["db"]["params"]);
$this->_connection = $this->createZendDbConnection($conn, $Resources["db"]["params"]["dbname"]);
}
return $this->_connection;
}
/**
* Returns the test dataset.
*
* @link http://framework.zend.com/wiki/display/ZFPROP/Zend_Test_PHPUnit_Database+-+Benjamin+Eberlei
* @return PHPUnit_Extensions_Database_DataSet_IDataSet
*/
protected function getDataSet(){
return $this->createFlatXMLDataSet(__DIR__."/seed_data.xml");
}
/**
* Setup
*/
protected function setUp(){
$this->_application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
}
}
答案 0 :(得分:8)
您可以使用composite datasets。
从手册:
复合DataSet对于已经聚合几个非常有用 现有数据集到单个数据集中。
public function getDataSet()
{
$ds1 = $this->createFlatXmlDataSet('fixture1.xml');
$ds2 = $this->createFlatXmlDataSet('fixture2.xml');
$compositeDs = new PHPUnit_Extensions_Database_DataSet_CompositeDataSet();
$compositeDs->addDataSet($ds1);
$compositeDs->addDataSet($ds2);
return $compositeDs;
}
(上面的代码示例直接来自文档,但似乎缺少构造函数参数。文档在合成时允许在多个数据集中定义表时也是错误的。)
答案 1 :(得分:2)
免责声明:以下内容仅适用于yaml灯具,由于某些原因,xml fixtures API 不会提供相同的功能(检查源代码),不要问我为什么,好像我们无论夹具文件格式类型如何,都应该能够添加多个表。
API有点笨拙,正是为什么我不喜欢将args传递给构造函数,特别是在这种情况下,但尝试以下(这已经过测试和工作):
class MyTest extends PHPUnit_Extensions_Database_TestCase
{
protected function getDataset()
{
$primary = new PHPUnit_Extensions_Database_DataSet_YamlDataSet('etc/fixture/dbname/table1.yml');
$primary->addYamlFile('etc/fixture/dbname/table2.yml');
$primary->addYamlFile('etc/fixture/dbname/table3.yml');
return $primary;
}
...
}