2011-05-23 24 views

Respuesta

3

Desafortunadamente, CakePHP no está diseñado para funcionar junto con PHPUnit. CakePHP ha cambiado a usar SimpleTest y tendrá una de dos opciones, refactorizar sus pruebas para trabajar con SimpleTest o modificar el núcleo para usar PHPUnit.

Sin embargo, debe decirse que Mark Story has stated that CakePHP 2.0 will use PHPUnit es su marco de prueba, por lo que si puede esperar hasta entonces, puede terminar siendo la mejor opción.

CakePHP 1.3 Book on Testing

+0

¡Gracias! No tengo pruebas en este momento por eso todavía puedo elegir entre los dos. Pasaré algún tiempo intentando ver si puedo hacer que CakePHP use PHPUnit core en su lugar. –

+0

SimpleTest siempre es problemático, especialmente con los datos de prueba para los modelos. – hongster

+0

Me gustaría modificar mi núcleo 1.3 para usar PHPUnit. ¿Alguna pista sobre cómo hacer que esto suceda? –

5

Es relativamente fácil. Utilizo Cake 1.3 de la instalación del compositor. Así es como mi composer.json parece:

{ 
    "config": { 
     "vendor-dir": "vendors/composer" 
    }, 
    "require": { 
     "phpunit/phpunit": "3.7.*", 
     "cakephp/cakephp-1.3": "1.3", 
    }, 
    "repositories": [ 
     { 
      "type": "package", 
      "package": { 
       "name": "cakephp/cakephp-1.3", 
       "version": "1.3", 
       "source": { 
        "url": "https://github.com/cakephp/cakephp.git", 
        "type": "git", 
        "reference": "1.3" 
       } 
      } 
     } 
    ] 
} 

A continuación, el archivo Bootstrap.php PHPUnit en el directorio de pruebas:

<?php 
include('../vendors/composer/autoload.php'); 
include('../webroot/index.php'); 

Esta es phpunit.xml formar el mismo directorio:

<?xml version="1.0" encoding="UTF-8"?> 
<phpunit 
    bootstrap="bootstrap.php" 

    backupStaticAttributes="false" 

    cacheTokens="false" 
    colors="false" 
    convertErrorsToExceptions="true" 
    convertNoticesToExceptions="true" 
    convertWarningsToExceptions="true" 
    forceCoversAnnotation="false" 
    mapTestClassNameToCoveredClassName="false" 
    printerClass="PHPUnit_TextUI_ResultPrinter" 

    processIsolation="false" 
    stopOnError="false" 
    stopOnFailure="false" 
    stopOnIncomplete="false" 
    stopOnSkipped="false" 
    testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader" 

    strict="false" 
    verbose="false" 
    > 

    <testsuites> 
     <testsuite name="AllTests"> 
     <directory>.</directory> 
     </testsuite> 
    </testsuites> 

    <filter> 
     <blacklist> 
      <directory suffix=".php"></directory> 
      <file></file> 
      <exclude> 
       <directory suffix=".php"></directory> 
       <file></file> 
      </exclude> 
     </blacklist> 
     <whitelist processUncoveredFilesFromWhitelist="true"> 
      <directory suffix=".php"></directory> 
      <file></file> 
      <exclude> 
       <directory suffix=".php"></directory> 
       <file></file> 
      </exclude> 
     </whitelist> 
    </filter> 
</phpunit> 

No olvide cargar sus clases de aplicación en la configuración de prueba. Puedes hacerlo cakephp manera. Por ejemplo, si el controlador se denomina calendario de su calendarTest.php puede verse como:

<?php 

/** 
* Class ComponentsCommonTest 
* @property calendarController $calendarController 
*/ 
class CalendarTest extends PHPUnit_Framework_TestCase 
{ 
    /** 
    * @var calendarController $calendarController 
    */ 
    private $calendarController; 

    function setUp() 
    { 
     App::import('Core', array('View', 'Controller', 'Model', 'Router')); 
     App::import('Controller', 'Calendar'); 
     $this->calendarController =& new CalendarController(); 
     $this->calendarController->constructClasses(); 
     $this->calendarController->layout = null; 
    } 
} 

Lo mismo para los modelos, las clases de proveedor y así sucesivamente. Funciona muy bien para mi