2011-08-12 11 views
7

tengo esto en mi archivo phpunit.xml:¿por qué PHPUnit intenta encontrar un archivo con el nombre de la suite de pruebas?

<phpunit ...> 
    <testsuites> 
     <testsuite name="MyTests"> 
      <directory>../path/to/some/tests</directory> 
     </testsuite> 
    </testsuites> 
    ... // more settings for <filter> and <logging> 
</phpunit> 

Y cuando voy a ejecutarlo, me sale este error:

PHP fatal error: Uncaught exception 'PHPUnit_Framework_Exception' 
with message 'Neither "MyTests.php" nor "MyTests.php" could be opened.' 

¿Por qué PHPUnit me da este error, y por qué es ¿Busca "MyTests.php" si le doy un directorio en el que buscar pruebas?

Y en una nota relacionada, cuando agrego más entradas <testsuite> con otras pruebas, PHPUnit se ejecuta sin error. ¿Que pasa con eso?

Respuesta

5

Por defecto PHPUnit añadirá "todos *Test clases que se encuentran en *Test.php archivos" (ver PHPUnit docs). Si no encuentra ningún archivo que coincida con esa descripción (por ejemplo, un archivo SomeTest.php que define una clase SomeTest), vuelve a buscar un archivo basado en el atributo de nombre del conjunto de pruebas.

La solución es crear un archivo que coincida con esa descripción para que PHPUnit no se caiga de nuevo a su valor predeterminado de búsqueda por el nombre del banco de pruebas:

<?php 
// in ../path/to/some/tests/SomeTest.php: 
class SomeTest extends PHPUnit_Framework_TestCase { 
    public function test() { 
     //... test cases here 
    } 
} 
?> 

Ahora usted debería ser capaz de ejecutar phpunit sin errores:

$ phpunit 
PHPUnit 3.5.14 by Sebastian Bergmann. 

. 

Time: 0 seconds, Memory: 10.75Mb 

OK (1 test, 0 assertions) 

se trabajará sin errores cuando se agrega más testsuite entradas si PHPUnit es capaz de encontrar casos de prueba a juego que se ejecutan bajo esas otras suites. Si encuentra pruebas para ejecutar en cualquier suite de pruebas, no recurrirá a la búsqueda por el atributo name para las suites para las que no pudo encontrar nada.

1

Creo que el problema es que no le está diciendo qué archivos contienen los casos de prueba y/o suites que desea ejecutar. Intente agregar el atributo suffix="Test.php".

<testsuite name="MyTests"> 
    <directory suffix="Test.php">../path/to/some/tests</directory> 
</testsuite> 
+0

Parece que el sufijo predeterminado es "Test.php"; es cuando no hay archivos que coincidan con el sufijo que comienza a buscar un archivo con el nombre dado en el atributo 'name'. Interesante. – chesles

+1

LOL, supuse que realmente tenía algunas pruebas para ejecutar y busqué lo que podría ser diferente en comparación con mi archivo. :) Es bueno saber que puedo omitir el sufijo a partir de ahora. –

Cuestiones relacionadas