2008-09-15 8 views

ответ

0

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

14

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

все ...

+0

Вы можете уточнить немного больше об этом? Мне нравится ваш абстрактный класс TestCase! Где вы помещаете свой Controller_TestCase? Нужно ли вам требовать/включать любые файлы? Как вы проводите тест? Вы используете PHPUnit через командную строку или с плагином в среде IDE? Благодаря! – Andrew 2009-03-17 06:13:32

+3

Я поместил Controller_TestCase в свои тесты/каталог Controller - это каталог, в котором находятся все тестовые примеры контроллера. Как правило, я не использую автоматическую загрузку при выполнении модульных тестов, но если я выполняю тесты контроллера, я использую Zend_Loader :: registerAutoload() для использования автоматической загрузки, потому что это очень ... – 2009-03-17 08:16:46

2

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

1

Использование ZF 1,10, я ставлю некоторый код начальной загрузки в тесты/bootstrap.php (в основном то, что в (публичный/index.php), до $ APPLICATION-> самозагрузки().

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

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

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

так на съемочной площадке до

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

}