2010-08-18 6 views
5

Je voulais écrire des tests unitaires pour mon application Zend Framework/Doctrine 2.0, mais je ne comprends pas très bien comment configurer les tests unitaires dans ZF. De plus, j'aimerais inclure Doctrine 2.0 dans ces tests unitaires. Comment est-ce que j'irais mettre en place ceci? Pouvez-vous me montrer un exemple?Tests unitaires avec Zend Framework/Doctrine 2.0

Merci

+0

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

+0

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

+0

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

Répondre

2

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

+0

Merci pour vos commentaires. Normalement, étendez-vous Zend_Test_PHPUnit_ControllerTestCase dans tous vos cas de test? Ou cette classe ne devrait-elle être prolongée que pour les tests du contrôleur? – clarkstachio

+0

Mes tests étendent le BaseControllerTestCase. Mais normalement, vous devriez seulement étendre à partir de BaseControllerTestCase pour vos tests de contrôleur et tous les autres tests de PHPUnit_Framework_TestCase – tom