Pour configurer les tests unitaires que j'ai créé un fichier de configuration pour PHPUnit (phpunit.xml) et un TestHelper.php dans le répertoire de test. La configuration dit essentiellement à phpunit quel test unitaire doit être exécuté et quels dossiers et fichiers doivent être ignorés dans la couverture. Dans ma configuration, ce sont simplement tous les fichiers de test unitaires dans le dossier de l'application et de la bibliothèque qui vont être exécutés. Le Testhelper doit être étendu par tous vos tests unitaires.
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 */
}
}
Ce ne couvre que la configuration initiale pour ZF et PHPUnit
Je suis aussi intéressé par la façon d'inclure Doctrine 2 dans les tests unitaires. J'ai même posté une question à ce sujet sur la liste de diffusion mais je n'ai pas eu de réponse. – tom
J'ai fait quelques progrès sur ce problème, et posterai ma configuration dans ce post quand j'aurai quelques minutes. Pensez-vous que l'on devrait tester la persistance dans leur couche modèle Doctrine 2.0, ou ne pas s'inquiéter à ce sujet et tester le modèle en tant qu'objets php simples? – clarkstachio
Je pense que vous devriez tester uniquement le modèle et non la doctrine. Comme ils écrivent leurs propres tests unitaires. Avez-vous fait des progrès avec cela? – tom