2010-08-18 11 views
5

Volevo scrivere test di unità per l'applicazione Zend Framework/Doctrine 2.0, ma non capisco come impostare il test dell'unità in ZF. Inoltre, vorrei includere Doctrine 2.0 in quei test unitari. Come dovrei fare per impostare questo? Puoi indicarmi un esempio?Test di unità con Zend Framework/Doctrine 2.0

Thank You

+0

Mi interessa come includere anche Doctrine 2 nei test unitari. Ne ho anche fatto una domanda sulla mailing list ma non ho avuto alcuna risposta. – tom

+0

Ho fatto qualche progresso su questo problema e pubblicherò la mia configurazione in questo post quando avrò un paio di minuti. Pensi che si dovrebbe testare la persistenza nel proprio livello del modello Doctrine 2.0, o non preoccuparsi di questo e testare il modello come semplici oggetti PHP? – clarkstachio

+0

Penso che dovresti testare solo il modello e non la dottrina. Mentre scrivono i loro test unitari. Hai fatto qualche progresso con esso? – tom

risposta

2

Per impostare i test di unità che ho creato un file di configurazione per phpunit (phpunit.xml) e un TestHelper.php nella directory di prova. La configurazione dice fondamentalmente a phpunit quale unità test deve essere eseguita e quali cartelle e file devono essere saltati nella copertura. Nella mia configurazione sono solo tutti i file di test unitari nell'applicazione e nella cartella della libreria che verranno eseguiti.

Il Testhelper deve essere esteso da tutti i test dell'unità.

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

Questo copre solo la configurazione iniziale per ZF e PHPUnit

+0

Grazie per il feedback. Solitamente estendi Zend_Test_PHPUnit_ControllerTestCase in tutti i tuoi casi di test? O questa classe dovrebbe essere estesa solo per i test del controller? – clarkstachio

+0

Il mio test estende tutto il BaseControllerTestCase. Ma normalmente dovresti estendere solo dal BaseControllerTestCase per i test del controller e tutti gli altri test da PHPUnit_Framework_TestCase – tom