2010-09-08 11 views
53

¿cómo puedo elegir un banco de pruebas específico para ser ejecutado?¿Cómo ejecutar un conjunto de pruebas de phpunit xml específico?

$ PHPUnit --configuration config.xml

config.xml:

<testsuites> 
    <testsuite name="Library"> 
     <directory>library</directory> 
    </testsuite> 
    <testsuite name="XXX_Form"> 
     <file>library/XXX/FormTest.php</file> 
     <directory>library/XXX/Form</directory> 
    </testsuite> 
</testsuites> 
+0

X-Ref: [Ejecutando una suite de pruebas por defecto en PHPUnit] (https://stackoverflow.com/q/37820193/367456) – hakre

Respuesta

76

Aquí está el código como si PHPUnit 3.7.13

$ phpunit --configuration config.xml --testsuite Library 
$ phpunit --configuration config.xml --testsuite XXX_Form 

Si desea ejecutar un grupo de los bancos de pruebas entonces usted puede hacer esto

<testsuites> 
    <testsuite name="Library"> 
    <directory>library</directory> 
    </testsuite> 
    <testsuite name="XXX_Form"> 
    <file>library/XXX/FormTest.php</file> 
    <directory>library/XXX/Form</directory> 
    </testsuite> 
    <testsuite name="Both"> 
    <directory>library</directory> 
    <file>library/XXX/FormTest.php</file> 
    <directory>library/XXX/Form</directory> 
    </testsuite> 
</testsuites> 

Entonces

$ phpunit --configuration config.xml --testsuite Both 

Desafortunadamente PHPUnit actualmente no es compatible con testsuites anidados como este

<testsuites> 
    <testsuite name="Both"> 
     <testsuite name="Library"> 
     <directory>library</directory> 
     </testsuite> 
     <testsuite name="XXX_Form"> 
     <file>library/XXX/FormTest.php</file> 
     <directory>library/XXX/Form</directory> 
     </testsuite> 
    </testsuite> 
</testsuites> 

De modo que si desea ejecutar grupos de pruebas de esta manera, debe tener la duplicación de la configuración xml.

+0

Tengo el problema de que simplemente se ignora. Sin pruebas ejecutadas. Si especifico el con corren bien, ¡pero no puedo especificarlos todos manualmente! Siguen el archivo Test.php y la convención de nombre de clase. ¿Idea? –

+0

¿puedes compartir tu archivo de configuración? Los detalles menores a menudo son a menudo el sospechoso. –

+0

http://stackoverflow.com/questions/15249469/phpunit-does-not-find-any-tests-with-director-xml-tag-but-does-with-some-file –

17

Esto no es posible en las versiones actuales de PHPUnit como lo demuestran estos mensajes de correo en PHPUnit fácil lista: http://thread.gmane.org/gmane.comp.php.phpunit.user/1302

Pero hay una alternativa, simplemente puede pasar un camino a phpunit.

phpunit library/XXX 

Esto iría en todas las pruebas en la biblioteca directorio/XXX

Si esto no es suficiente para ti, otra opción es utilizar el @group annotation para dividir las pruebas en diferentes categorías, que luego podrían ser ejecutados de forma selectiva.

+0

bueno, como pueden ver en mi publicación, esto no es exactamente lo que necesito –

+0

Entonces no hay nada que puedas hacer, como se señaló en el primer enlace de mi respuesta. –

2

Otra opción es crear un archivo de configuración separado para cada conjunto de pruebas que le gustaría probar por separado. Hay algunos gastos generales en los que puede que tenga que copiar/pegar configuraciones duplicadas, pero luego podría especificar cada archivo de configuración según sea necesario.

1

Las demás respuestas aquí son correctas. No puedes hacer esto usando una configuración xml, lo que puedes hacer es crear el mismo tipo de configuración en php.

Sin duda no es la cosa más bonita, pero debería darle la funcionalidad que necesitaría.

que ya ha proporcionado la configuración xml

<testsuites> 
    <testsuite name="Library"> 
    <directory>library</directory> 
    </testsuite> 
    <testsuite name="XXX_Form"> 
    <file>library/XXX/FormTest.php</file> 
    <directory>library/XXX/Form</directory> 
    </testsuite> 
</testsuites> 

Hipotéticamente, digamos que su directorio "biblioteca" contiene 3 archivos:

library 
    XXX  
    FormTest.php 
    Unit 
    unittest1.php 
    unittest2.php 

y que cada uno de los archivos contiene 1 prueba por convención de nomenclatura perfecta, por ejemplo: FormTest contiene testForm()

Para la configuración crearemos una configuración que contiene todo:

<?php 
include_once "library/XXX/FormTest.php"; 
include_once "library/Unit/unittest1.php"; 
include_once "library/Unit/unittest2.php"; 

Luego crearemos una clase por las convenciones de nomenclatura phpunit. Puede que el nombre lo que quiera como nunca lo usamos en realidad ...

class LibraryConfigTest extends PHPUnit_Framework_TestCase { 

Cada "banco de pruebas" simplemente habrá un método que ejecuta las pruebas que desee. Nombra los métodos como quieras; una vez más, nunca los usaremos. Phpunit se encargará de correr. Sin embargo, asegúrese de comentarlos en grupos para que sepa cómo ejecutarlos.

/** 
* All Tests in Library 
* @group Library 
**/ 
    public function testLibrary() { 
     UnitTest1::testUnit1(); 
     UnitTest2::testUnit2(); 
     FormTest::testForm(); 
    } 

/** 
* All Form tests in library/XXX 
* @group XXX_Form 
**/ 
    public function testForm() { 
     FormTest::testForm(); 
    } 
} 
?> 

Ahora, para obtener la funcionalidad que desea, simplemente ejecute la "configuración" contra el grupo que desea.

phpunit --group XXX_Form library_config.php 
phpunit --group Library library_config.php 

Como ya he dicho, esto es feo y ciertamente no un buen código, ya que requieren un mantenimiento constante, pero le dará la funcionalidad que está buscando.

suerte Bergmann se sumará esta funcionalidad en su siguiente ronda a pesar de que no parece probable ya que parece ser más o menos ignoring it.

2

A partir de phpunit 6.1, puede utilizar en el archivo de configuración xml el atributo defaultTestSuite, esto es como usar una opción predeterminada phpunit --testsuite xxx y se reemplaza.

Cuestiones relacionadas