Редактировать: Извините, я пропустил эту часть вашего вопроса в первый раз (кофе еще нет!). Я отредактировал ответ.
Проблема заключается в том, что Zend_Test_PHPUnit_ControllerTestCase
предназначен для контроллеров модульного тестирования. Он пытается использовать очень несколько зависимостей от остальной части фреймворка и НЕ запускает автоматически / bootstrap / что-либо (и не знает) о вашем более крупном приложении.
По сути, getResouce
не работает, потому что ваш загрузчик не существует.
Если вы посмотрите вокруг Zend_Test_PHPUnit_ControllerTestCase
, вы увидите, что он вручную настраивает и использует Zend_Controller_Front
и инициализирует свои собственные объекты запроса / ответа для каждого теста. Он пытается быть как можно большим количеством модульного теста , а не функциональным или интеграционным тестом.
Чтобы решить вашу проблему, вы должны указать тестовому набору , как загрузить приложение. Есть несколько способов добиться этого.
Во-первых, вы можете назначить файл общедоступному свойству bootstrap
тестового класса.
public $bootstrap = '/path/to/bootstrap/file.php'
Это хороший вариант для приложений, использующих Zend_Application
.
Или, обеспечив обратный вызов свойства bootstrap
:
public function setUp()
{
// Use the 'start' method of a Bootstrap object instance:
$bootstrap = new Bootstrap('test');
$this->bootstrap = array($bootstrap, 'start');
parent::setUp();
}
Примечание: действительно важно вызвать родительский метод setUp
, если вы переопределите его.
Редактировать 2: Хорошо, вы фактически загружаете свое приложение. Итак, вы сделали выше, и до сих пор не повезло.
Я бы порекомендовал переопределить метод dispatch
TestCase, чтобы убедиться, что он получает загрузчик. (Это сработает наверняка).
public function dispatch($url = null)
{
$this->getFrontController()->setParam('bootstrap', $yourBootstrap);
parent::dispatch($url);
}
Если подумать, вы, вероятно, могли бы сделать это и в setUp
.
Это позволит тестовому комплекту правильно имитировать поведение фронт-контроллера, созданного с помощью Zend_Application
. Теперь оба метода доступа к начальной загрузке должны работать.