Как мне использовать PHPUnit с Zend Framework? - PullRequest
41 голосов
/ 15 сентября 2008

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

Ответы [ 6 ]

14 голосов
/ 16 сентября 2008

Я использую 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');
    }
}

Вот и все ...

7 голосов
/ 08 октября 2008

У них есть " Введение в искусство модульного тестирования " в Zend Developer Zone, которое охватывает PHPUnit.

2 голосов
/ 21 февраля 2009

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

1 голос
/ 08 марта 2010

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

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

phpunit --bootstrap ../bootstrap.php  PersonControllerTest.php 
0 голосов
/ 19 апреля 2011

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

так настроено

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);

}
0 голосов
/ 15 сентября 2008

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

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