7

PHPUnitに複数のフラットxmlデータセットをロードして、多くのフィクスチャをロードすることは可能ですか?

かなり複雑なアプリケーションを作成していて、xmlデータセットがかなり大きくなっているので、2〜3xmlに入れたいと思います。

テストケースの現在のコードは次のとおりです。

<?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'
    );
}   

}

4

2 に答える 2

8

複合データセットを使用できます。

マニュアルから:

複合データセットは、いくつかの既存のデータセットを単一のデータセットに集約するのに非常に役立ちます。

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

(上記のコード例はドキュメントから直接引用したものですが、コンストラクターパラメーターが欠落しているようです。合成時にテーブルを複数のデータセットで定義できるようにすることについてもドキュメントは正しくありません。)

于 2013-04-16T01:50:23.517 に答える
2

Dislaimer:以下はyamlフィクスチャでのみ機能します。何らかの理由でxmlフィクスチャAPIは同じ機能(チェックされたソースコード)を提供していません。理由を聞かないでください。フィクスチャファイルのフォーマットタイプ。

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;
    }
...
}
于 2012-08-06T22:27:59.243 に答える