(PHP):zend_test_phpunit_databasetestcaseでモデルをテストします
-
09-10-2019 - |
質問
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
予想される結果は、明らかにテストが合格することです。いくつかのエコーを振りかけることで、これが親の内部から引き起こされていることを発見しました:: 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);
}
}
解決
それがあなたを助けるかどうかはわかりませんが、問題は次のとおりです。$this->bootstrap = array($this, 'appBootstrap');
ZEND_TEST_PHPUNIT_CONTROLLERTESTCASEとは異なり、ZEND_TEST_PHPUNIT_DATABASETESTCASEに$ BootStrapプロパティが存在しないことがわかります。だから、あなたのブートストラップ方法は呼び出されないと思います。
したがって、ラインを交換しようとすることができます $this->bootstrap = array($this, 'appBootstrap');
と $this->appBootstrap();
.
他のヒント
今日も同じ問題がありました。ここでの理由は、XMLフィクスチャがmysqldumpによって生成され、 <database name="xyz">
ノード。これにより、$ this-> tables in phpunitのテーブルが代わりにnullに変わりました。
完全なソリューションとコード http://www.unexpectuntit.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. Pascual www.unexpectuntit.com