Проблема с использованием PHPUnit с Zend_Test и фиктивными объектами - PullRequest
0 голосов
/ 12 апреля 2011

У меня проблема с использованием PHPUnit с Zend_Test и фиктивными объектами. Я использую структуру Кейта Поупа, чтобы узнать о модульном тестировании. У меня есть тесты контроллера в тестах / modules / default / controllers и модульные тесты в tests / modules / default / models. Существует также подкаталог в каталоге моделей под названием TestResources, который содержит файлы, создающие фиктивные объекты.

Существует модельный модульный тест с именем Default_Model_UserTest. Он наследуется от ControllerTestCase, который имеет функцию настройки, которая используется для всех тестов. В Default_Model_UserTest дополнительная настройка заставляет тест использовать User.php в папке TestResources в качестве ресурса. Функция настройки выглядит следующим образом:

protected function setUp() {
    parent::setUp();

    // Replace Model Resources with TestResources
    $autoloader = new Zend_Loader_Autoloader_Resource(array(
        'basePath' => dirname(__FILE__),
        'namespace' => 'Default'
        )
    );
    $autoloader->addResourceType('modelResource', 'TestResources', 'Resource');

    $this->object = new Default_Model_User;

}

Когда я запускаю тест самостоятельно, он корректно работает с использованием фиктивного объекта. У меня также есть тест контроллера, который проверяет, может ли пользователь проверить подлинность, который проверяет базу данных mysql. При этом запускается Default_Model_UserTest, который идет после того, как CustomerControllerTest не использует User.php в папке TestResources, но использует ресурс User.php в главном каталоге приложения, поэтому он использует базу данных mysql, а не объект mock. Я не могу понять, почему. При попытке отладки я вижу, что после запуска теста проверки подлинности он полностью игнорирует файл User.php в папке TestResources.

Если проблема связана с неправильным сбросом тестов, я добавил функцию разрыва в ControllerTestCase.php:

protected function tearDown()
{
    Zend_Controller_Front::getInstance()->resetInstance();
    $this->resetRequest();
    $this->resetResponse();

    $this->request->setPost(array());
    $this->request->setQuery(array());

    unset($_SERVER['DOCUMENT_ROOT']);
    parent::tearDown();
}

Функция разрыва в CustomerControllerTest.php:

protected function tearDown() 
{
    Zend_Auth::getInstance()->clearIdentity();
    Zend_Session::forgetMe();
     parent::tearDown();            
}

Я искал ответ везде, где мог придумать эту проблему, но ничего не могу найти. Я использую PHPUnit 3.5.11 и Zend Framework 1.11.3. Буду очень признателен, если кто-нибудь поймет, почему он так себя ведет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...