2012-05-27 121 views
4

多個數據集是否有可能在加載多的PHPUnit平整的xml數據集加載大量的傢俱?PHPUnit的:數據庫測試

我們正在寫一個相當複雜的應用程序和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

哇,恰好碰到了同樣的問題,但不是處理複雜的數據集,我寧願讓他們的原子,使他們能夠在其他測試中使用。將數據集緊密結合到特定測試沒有多大意義。你能弄明白嗎? –

+0

不幸的是,不!我們有很多,每次考試所需的夾具(我們有好幾個表連接在一起),複製燈具在每個測試情況下,許多文件可以到十個分量對我們來說是痛苦。去與劈裂XML燈具的唯一方法就是建立一些包裝類Zend_Test_PHPUnit_DatabaseTestCase和編寫一個「addXmlFile」的方法,但我沒有時間這樣做。下一次,我會明確地使用單獨的yaml裝置在需要時加載。 –

回答

2

Dislaimer:下面將只對YAML燈具正常工作,由於某種原因,XML燈具API DOES NOT負擔相同的功能(檢查源代碼),不要問我爲什麼,似乎我們應該能夠添加多個表,無論夾具文件格式類型如何。

的API是一個有點笨拙,究竟爲什麼我不喜歡通過參數傳遞給構造函數,尤其是在這種情況下,但請嘗試以下(這是測試工作):

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; 
    } 
... 
} 
7

你可以使用​​。

從手冊:

的複合數據集是用於聚集幾個已經 現有數據集到一個單一的數據集是非常有用的。

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; 
} 

(以上代碼的例子是直接從文檔,但似乎缺少的構造參數。該文檔是也是不正確的有關允許合成時,以在多於一個數據集來定義的表。)

+0

這是一個整潔的解決方案,將嘗試下一次我需要。謝謝 –

+0

我固定的示例代碼,根據https://github.com/sebastianbergmann/dbunit/blob/master/PHPUnit/Extensions/Database/DataSet/CompositeDataSet.php構造函數會自動調用addDataSet方法 –