2011-04-25 23 views
6

Tengo un proyecto de Zend Framework, y quiero usar pruebas unitarias para probarlo.phpunit throws Excepción no detectada 'PHPUnit_Framework_Exception

En la carpeta de pruebas, tengo el phpunit.xml de la siguiente manera;

<phpunit bootstrap="./application/bootstrap.php" colors="true"> 
<testsuite name="Application Test Suite"> 
    <directory>./</directory> 
</testsuite> 

<filter> 
    <whitelist> 
     <directory suffix=".php">../application/</directory> 
     <exclude> 
      <directory suffix=".phtml">../application/</directory> 
      <file>../application/Bootstrap.php</file> 
      <file>../application/controllers/ErrorController.php</file> 
     </exclude> 
    </whitelist> 
</filter> 

<logging> 
    <log type="coverage-html" target="./log/reprot" charset="UTP-8" 
    yui="true" highlight = "true" lowUpoerBound="50" highLowerBound="80"/> 
    <log type="textdox" target="./log/testdox.html" /> 
</logging> 

Y tengo bootstrap.php en/pruebas carpeta/aplicación de la siguiente manera:

<?php 
error_reporting(E_ALL | E_STRICT); 

// Define path to application directory 
defined('APPLICATION_PATH') 
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../../application')); 

// Define application environment 
defined('APPLICATION_ENV') 
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'testing')); 

// Ensure library/ is on include_path 
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'), 
    get_include_path(), 
))); 

require_once 'Zend/Loader/Autoloader.php'; 

require_once 'controllers/ControllerTestCase.php'; 
Zend_Loader_Autoloader::getInstance(); 

cuando voy a la línea de comandos, ejecute el siguiente comando

phpunit --configuration phpunit.xml 

arroja la excepción:

PHP Fatal error: Uncaught exception 'PHPUnit_Framework_Exception' with message 
'Neither "Application Test Suite.php" nor "Application Test Suite.php" could be 
opened.' in D:\PHP\php5\PEAR\PHPUnit\Util\Skeleton\Test.php:102 
Stack trace: 
#0 D:\PHP\php5\PEAR\PHPUnit\TextUI\Command.php(157): PHPUnit_Util_Skeleton_Test- 
>__construct('Application Tes...', '') 
#1 D:\PHP\php5\PEAR\PHPUnit\TextUI\Command.php(129): PHPUnit_TextUI_Command->run 
(Array, true) 
#2 D:\PHP\php5\phpunit(53): PHPUnit_TextUI_Command::main() 
#3 {main} 
    thrown in D:\PHP\php5\PEAR\PHPUnit\Util\Skeleton\Test.php on line 102

¿Cómo podría solucionarlo?

Respuesta

5

Notará que lanza la excepción porque está buscando un archivo con el mismo nombre que el name que proporcionó para su conjunto de pruebas. Necesita escribir un banco de pruebas y luego proporcionar el nombre del conjunto de pruebas a su configuración: http://www.phpunit.de/manual/3.2/en/organizing-test-suites.html

+0

que añadir el siguiente código en la carpeta que contiene Bootstrap.php addTestSuite ('MyApp'); // ... return $ suite; } } y sigue siendo el mismo error –

+0

¿Cambió el nombre que proporcionó en usted XML? Esto debe corresponder directamente con el nombre de archivo de la clase del conjunto de pruebas menos la extensión. Entonces, si el código que acaba de publicar está en 'MyApp.php', entonces su xml debería verse así:' 'a diferencia de' ' – prodigitalson

+0

sí, yo Ya cambió el nombre en el archivo xml, el error es el mismo –

0

Me di cuenta de que no está usando el <testsuites> que contiene múltiples ocurrencias de <testsuite>.

Aquí es mi phpunit.xml que funciona muy bien para los proyectos de Zend Framework:

<testsuites> 
    <testsuite name="UnitTests"> 
    <directory>./library</directory> 
    </testsuite> 
    <testsuite name="ApplicationTests"> 
    <directory>./application</directory> 
    </testsuite> 
</testsuites> 
+0

Gracias Brown, utilicé tu xml, pero el error es el mismo. –

7

que estaba teniendo el mismo problema con la misma configuración. Por lo que entiendo, las versiones más recientes de PHPUnit requieren al menos una prueba real para ejecutarse correctamente. Después de crear una prueba simple, funcionó.

miProyecto/pruebas/aplicación/DemoTest.php

<?php 
class DemoTest extends ControllerTestCase 
{ 
    public function setUp() { 
     parent::setUp(); 
    } 

    public function testCanDoUnitTest() { 
     $this->assertTrue(true); 
    } 
} 
+0

Esto me arregló el problema, gracias. –

Cuestiones relacionadas