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