2010-08-18 20 views
5

Quería escribir pruebas unitarias para mi aplicación Zend Framework/Doctrine 2.0, pero no entiendo muy bien cómo configurar las pruebas unitarias en ZF. Además, me gustaría incluir Doctrine 2.0 en esas pruebas unitarias. ¿Cómo voy a configurar esto? ¿Puedes señalarme un ejemplo?Pruebas unitarias con Zend Framework/Doctrine 2.0

Gracias

+0

También estoy interesado en la forma de incluir Doctrine 2 en las pruebas unitarias. Incluso publiqué una pregunta al respecto en la lista de correo pero no obtuve ninguna respuesta. – tom

+0

He hecho algunos progresos en este tema y publicaré mi configuración en esta publicación cuando reciba un par de minutos. ¿Crees que se debe probar la persistencia en su capa de modelo de Doctrine 2.0, o no preocuparse por eso y probar el modelo como objetos php simples? – clarkstachio

+0

Creo que deberías probar solo el modelo y no la doctrina. Mientras escriben sus propias pruebas unitarias. ¿Hiciste algún progreso con eso? – tom

Respuesta

2

Para configurar las pruebas unitarias que he creado un archivo de configuración para PHPUnit (phpunit.xml) y un TestHelper.php en el directorio de prueba. La configuración básicamente dice phpunit qué unidad de prueba necesita ser ejecutada y qué carpetas y archivos deben omitirse en la cobertura. En mi configuración solo son todos los archivos de prueba de unidad en la aplicación y la carpeta de la biblioteca que se van a ejecutar.

El Testhelper necesita extenderse por todas las pruebas de su unidad.

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 */ 
    } 
} 

Esto sólo cubre la configuración inicial de ZF y PHPUnit

+0

Gracias por los comentarios. ¿Extienes normalmente Zend_Test_PHPUnit_ControllerTestCase en todos tus casos de prueba? ¿O debería esta clase extenderse solo para las pruebas de controlador? – clarkstachio

+0

Mi prueba extiende el BaseControllerTestCase. Pero normalmente solo debe extenderse desde BaseControllerTestCase para sus pruebas de controlador y todas las demás pruebas de PHPUnit_Framework_TestCase – tom