2010-08-18 4 views
5

Я хотел написать модульные тесты для моего приложения Zend Framework/Doctrine 2.0, но я не совсем понимаю, как настроить модульное тестирование в ZF. Кроме того, я хотел бы включить Doctrine 2.0 в те модульные тесты. Как я могу это настроить? Можете ли вы указать мне пример?Модульное тестирование с Zend Framework/Doctrine 2.0

Спасибо

+0

Я также заинтересован в том, чтобы включить Доктрина 2 в модульных тестах. Я даже задал вопрос об этом в списке рассылки, но у меня не было ответа. – tom

+0

Я сделал некоторый прогресс по этой проблеме, и опубликую мои настройки в этом сообщении, когда я получу пару минут. Считаете ли вы, что нужно проверить настойчивость на уровне модели Doctrine 2.0 или не беспокоиться об этом и проверить модель как простые объекты php? – clarkstachio

+0

Я думаю, вы должны проверить только модель, а не доктрину. Когда они пишут свои собственные модульные тесты. Проделали ли вы некоторый прогресс? – tom

ответ

2

Для установки модульных тестов я создал конфигурационный файл для PHPUnit (phpunit.xml) и TestHelper.php в тестовом каталоге. Конфигурация в основном говорит phpunit, который должен выполняться модульный тест, и чтобы папки и файлы пропускались в зоне покрытия. В моей конфигурации это всего лишь единичные тестовые файлы в папке приложения и библиотеки, которые будут выполнены.

Тестер должен быть расширен всеми вашими модульными испытаниями.

phpunit.xml

<phpunit bootstrap="./TestHelper.php" colors="true"> 
    <testsuite name="Your Application"> 
     <directory>./application</directory> 
     <directory>./library</directory> 
    </testsuite> 
    <filter> 
     <whitelist> 
      <directory suffix=".php">../application/</directory> 
      <directory suffix=".php">../library/App/</directory> 
      <exclude> 
       <directory suffix=".phtml">../application/</directory> 
       <directory suffix=".php">../application/database</directory> 
       <directory suffix=".php">../application/models/Entities</directory> 
       <directory suffix=".php">../application/models/mapping</directory> 
       <directory suffix=".php">../application/models/proxy</directory> 
       <directory suffix=".php">../application/views</directory> 
       <file>../application/Bootstrap.php</file> 
       <file>../application/modules/admin/controllers/ErrorController.php</file> 
      </exclude> 
     </whitelist> 
    </filter> 
    <logging> 
     <log type="coverage-html" target="./log/report" title="PrintConcept" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" /> 
     <log type="testdox" target="./log/testdox.html" /> 
    </logging> 
</phpunit> 

TestHelper.php

<?php 
error_reporting(E_ALL | E_STRICT); 

// Define path to application directory 
defined('APPLICATION_PATH') 
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); 

// Define testing application environment 
define('APPLICATION_ENV', 'testing'); 

// Ensure library/ is on include_path 
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'), 
    get_include_path(), 
))); 

/** 
* Zend_Application 
*/ 
require_once 'Zend/Application.php'; 

/** 
* Base Controller Test Class 
* 
* All controller test should extend this 
*/ 
require_once 'Zend/Test/PHPUnit/ControllerTestCase.php'; 

abstract class BaseControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase 
{ 
    public function setUp() 
    { 
     $application = new Zend_Application(APPLICATION_ENV, 
          APPLICATION_PATH . '/configs/application.ini'); 
     $this->bootstrap = array($application->getBootstrap(), 'bootstrap'); 

     Zend_Session::$_unitTestEnabled = true; 

     parent::setUp(); 
    } 

    public function tearDown() 
    { 
     /* Tear Down Routine */ 
    } 
} 

Это покрывает только начальную установку для ZF и PHPUnit

+0

Спасибо за отзыв. Вы обычно расширяете Zend_Test_PHPUnit_ControllerTestCase во всех своих тестовых случаях? Или этот класс должен быть расширен только для тестов контроллера? – clarkstachio

+0

Мои тесты расширяют BaseControllerTestCase. Но, как правило, вы должны только расширяться от BaseControllerTestCase для тестов контроллера и всех других тестов из PHPUnit_Framework_TestCase – tom