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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
41
0
25 364
6

Ответы 6

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

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

Вот и все...

Не могли бы вы подробнее рассказать об этом? Мне нравится ваш абстрактный класс TestCase! Куда вы положите свой Controller_TestCase? Вам нужно требовать / включать какие-либо файлы? Как провести тест? Вы используете PHPUnit через командную строку или с плагином в среде IDE? Спасибо!

Andrew 17.03.2009 09:13

Я помещаю Controller_TestCase в свой каталог tests / Controller - это каталог, в котором расположены все тестовые примеры контроллеров. Обычно я не использую автоматическую загрузку при запуске модульных тестов, но если я провожу тесты контроллера, я использую Zend_Loader :: registerAutoload () для использования автоматической загрузки, потому что это очень ...

Stefan Gehrig 17.03.2009 11:16

... сложно отслеживать зависимости при работающем MVC. Вам просто нужно убедиться, что вы следуете соглашению об именах и что Zend_Loader найдет ваши файлы (установите include_path). Для запуска своих тестов я использую CLI PHPUnit, потому что мне не нравится интеграция PHPUnit в Eclipse PDT. Его...

Stefan Gehrig 17.03.2009 11:19

... на самом деле нет проблем с переключением окон для запуска тестов - особенно если вы следуете соглашению об именах PHPUnit (так же, как соглашение Zend Framework) и используете TestSuites для группировки ваших тестов. Возможно, вам стоит взглянуть на структуру тестирования, используемую, например, сам Zend Framework.

Stefan Gehrig 17.03.2009 11:23

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

ссылка в настоящее время не работает

thanksd 19.01.2016 19:42

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

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

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

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

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

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

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

}

Другие вопросы по теме