(PHP): Тестирование моделей с помощью Zend_Test_PHPUnit_DatabaseTestCase

Когда я запускаю свой модульный тест 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); } } 

    Не уверен, что это вам поможет, но проблема может быть $this->bootstrap = array($this, 'appBootstrap'); с: $this->bootstrap = array($this, 'appBootstrap');

    Вы видите, что $ bootstrap свойство не существует в Zend_Test_PHPUnit_DatabaseTestCase, в отличие от Zend_Test_PHPUnit_ControllerTestCase. Поэтому я думаю, что ваш метод bootstrap не вызывается.

    Таким образом, вы можете попытаться заменить строку $this->bootstrap = array($this, 'appBootstrap'); с $this->appBootstrap(); ,

    Сегодня у меня была такая же проблема. Причина в том, что XML-файл был сгенерирован MySQLDump и отсутствует узел <database name="xyz"> . Это превратило $ this-> таблицы в PHPUnit в NULL вместо Array.

    Полное решение и код на http://www.unexpectedit.com/zend-php/testing-database-model-with-phpunit-on-zend-studio

    Редактировать приложение / 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. Паскуаль http://www.unexpectedit.com