3

PHP単体テストを実行すると、次のようになります。

1) Test_Model_Mapper_TestTest::testTest
Argument 1 passed to PHPUnit_Extensions_Database_DataSet_DefaultTableIterator::__construct() must be an array, null given, called in /usr/share/php/PHPUnit/Extensions/Database/DataSet/AbstractXmlDataSet.php on line 134 and defined

/var/www/kosheroven/library/Zend/Test/PHPUnit/Db/Operation/Truncate.php:73
/var/www/kosheroven/tests/ModelTestCase.php:79
/var/www/kosheroven/tests/application/models/mappers/TestTest.php:33

期待される結果は、明らかにテストに合格することです。いくつかのエコーをまき散らしたところ、これがparent::setUp()呼び出し内から発生していることを発見しましたが、その理由はわかりません. 私は完全に立ち往生しています。どんな助けでも大歓迎です。

// /tests/ModelTestCase.php

abstract class Test_ModelTestCase extends Zend_Test_PHPUnit_DatabaseTestCase
{
    public $application;
    protected $_db;
    protected $_model;
    protected $_modelClass;
    protected $_filesDir;

    public function setUp()
    {
        $this->application = new Zend_Application(
            APPLICATION_ENV,
            APPLICATION_PATH . '/configs/application.ini'
        );

        $this->bootstrap = array($this, 'appBootstrap');

        $this->_filesDir  = dirname(__FILE__) . '/files/';
        $this->_filesDir .= str_replace('_', '/', get_class($this));
        $this->_model     = new $this->_modelClass();
        // echo '123'; is printed
        parent::setUp();
        // echo '456'; is not
    }

    public function appBootstrap()
    {
        $this->application->bootstrap();
    }

    protected function getConnection()
    {
        if(empty($this->_db))
        {
            $options = $this->application->getOptions();
            $schema = $options['resources']['db']['params']['dbname'];
            $db = $this->application->getBootstrap()->getPluginResource('db')
                    ->getDbAdapter();

            $this->_db = $this->createZendDbConnection($db, $schema);
        }

        return $this->_db;
    }

    protected function getDataSet()
    {
        return $this->createXmlDataSet(dirname(__FILE__) . '/files/seed.xml');
    }
}

// /tests/Model/Mapper/TestTest.php

class Test_Model_Mapper_TestTest extends Test_ModelTestCase
{
    protected $_modelClass = 'Application_Model_Mapper_Ingredients';

    public function testTest()
    {
        $this->assertTrue(true);
    }
}
4

3 に答える 3

1

それがあなたを助けるかどうかはわかりませんが、問題は次のようなものかもしれません: $this->bootstrap = array($this, 'appBootstrap');

Zend_Test_PHPUnit_ControllerTestCase とは異なり、Zend_Test_PHPUnit_DatabaseTestCase には $bootstrap プロパティが存在しないことがわかります。したがって、ブートストラップ メソッドが呼び出されていないと思います。

$this->bootstrap = array($this, 'appBootstrap');したがって、行をに置き換えてみることができます$this->appBootstrap();

于 2011-01-12T14:41:44.007 に答える
1

今日も同じ問題がありました。ここでの理由は、XML フィクスチャが MySQLDump によって生成され、<database name="xyz">ノードが欠落していたためです。これにより、PHPUnit の $this->tables が配列ではなく NULL に変わりました。

于 2013-04-25T10:54:30.490 に答える
0

http://www.unexpectedit.com/zend-php/testing-database-model-with-phpunit-on-zend-studioの完全なソリューションとコード

application / configs/application.iniを編集します

[testing : production]
resources.db.adapter = "pdo_mysql"
resources.db.params.host = 127.0.0.1
resources.db.params.port = 8889
resources.db.params.username = root
resources.db.params.password = root
resources.db.params.dbname = "test_myproject_com"
xmlseeds.folder = APPLICATION_PATH "/../tests/xmlseeds/"

フォルダとファイルを作成しますMyProject/library / Application / Test / PHPUnit / DatabaseTestCase / Abstract.php

フォルダとファイルを作成しますMyProject/tests / application / models / ProjectTest.php

ファイル/tests/xmlseeds/*.xmlを作成します

I.パスカルwww.unexpectedit.com

于 2011-05-04T00:48:23.343 に答える