Подтвердить что ты не робот

Как использовать PHPUnit с Zend Framework?

Я хотел бы знать, как писать тесты PHPUnit с Zend_Test и вообще с PHP.

4b9b3361

Ответ 1

Я использую Zend_Test для полной проверки всех контроллеров. Это довольно просто настроить, так как вам нужно только настроить ваш загрузочный файл (сам загрузочный файл НЕ должен посылать передний контроллер!). Мой базовый тестовый класс выглядит следующим образом:

abstract class Controller_TestCase extends Zend_Test_PHPUnit_ControllerTestCase
{
    protected function setUp()
    {
        $this->bootstrap=array($this, 'appBootstrap');
        Zend_Auth::getInstance()->setStorage(new Zend_Auth_Storage_NonPersistent());
        parent::setUp();
    }

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

    protected function appBootstrap()
    {
        Application::setup();
    }
}

где Application::setup(); выполняет все задачи настройки, которые также настраивают реальное приложение. Тогда простой тест будет выглядеть следующим образом:

class Controller_IndexControllerTest extends Controller_TestCase
{
    public function testShowist()
    {
        $this->dispatch('/');
        $this->assertController('index');
        $this->assertAction('list');
        $this->assertQueryContentContains('ul li a', 'Test String');
    }
}

Что все...

Ответ 3

Я нашел эту статью очень полезной. Также значительно облегчилась документация Zend_Test. С помощью этих двух ресурсов мне удалось успешно выполнить модульное тестирование в учебнике QuickStart в Zend Framework и написать несколько тестов для него.

Ответ 4

Используя ZF 1.10, я поместил некоторый код начальной загрузки в test/bootstrap.php(в основном то, что находится в (public/index.php), до $application- > bootstrap().

Затем я могу запустить тест, используя

phpunit --bootstrap ../bootstrap.php  PersonControllerTest.php 

Ответ 5

Я не использовал Zend_Test, но я написал тесты против приложений с использованием Zend_MVC и т.п. Самая большая часть - это получение вашего кода начальной загрузки в тестовой настройке.

Ответ 6

Плюс, если вы используете транзакцию базы данных, тогда было бы лучше удалить всю транзакцию, которая выполняется с помощью unit test, иначе ваша база данных будет запутана.

и так далее

public function setUp() {



    YOUR_ZEND_DB_INSTANCE::getInstance()->setUnitTestMode(true);



    YOUR_ZEND_DB_INSTANCE::getInstance()->query("BEGIN");

    YOUR_ZEND_DB_INSTANCE::getInstance()->getCache()->clear();

    // Manually Start a Doctrine Transaction so we can roll it back
    Doctrine_Manager::connection()->beginTransaction();
}

и при отрыве всего, что вам нужно сделать, это откат

public function tearDown() {



    // Rollback Doctrine Transactions
    while (Doctrine_Manager::connection()->getTransactionLevel() > 0) {
        Doctrine_Manager::connection()->rollback();
    }

    Doctrine_Manager::connection()->clear();



    YOUR_ZEND_DB_INSTANCE::getInstance()->query("ROLLBACK");
    while (YOUR_ZEND_DB_INSTANCE::getInstance()->getTransactionDepth() > 0) {
        YOUR_ZEND_DB_INSTANCE::getInstance()->rollback();
    }
    YOUR_ZEND_DB_INSTANCE::getInstance()->setUnitTestMode(false);

}