2012-04-20 12 views
50

estoy utilizando PHPUnit en conexión con Jenkins, y quiero omitir ciertas pruebas mediante el establecimiento de la configuración en el archivo XML phpunit.xml¿Cómo saltarse las pruebas en PHPunit?

Sé que puedo utilizar en la línea de comandos:

phpunit --filter testStuffThatBrokeAndIOnlyWantToRunThatOneSingleTest

¿cómo puedo traducir eso al archivo XML ya que la etiqueta <filters> es solo para la cobertura de código?

me gustaría ejecutar todas las pruebas, aparte de testStuffThatAlwaysBreaks

+1

KO: ¿qué hay de la fijación de la prueba? por cierto, hola de welly ;-) – zerkms

+0

No escribí las pruebas, es algo irrelevante, y tampoco quiero cambiar los archivos centrales – Filype

+0

Dudosamente puedes hacerlo. Es un requisito muy extraño – zerkms

Respuesta

92

La forma más rápida y más fácil de saltar las pruebas que se rompen ya sea o que necesita para continuar trabajando en adelante es añadir simplemente lo siguiente a la parte superior de la prueba de unidad individual:

$this->markTestSkipped('must be revisited.'); 
+0

, siempre puedes agregar directorios o pruebas al archivo de configuración xml, sin embargo, si esto es un controlador o similar, eso no es muy práctico porque probablemente tengas docenas de otras pruebas en ese archivo. Supongo que si no tienes acceso a las pruebas unitarias, no estoy seguro de entender por qué, entonces no tienes más remedio que excluir. – jsteinmann

+3

Como es un método estático (al menos en PHPUnit 3), y algunas clases usan afaik de enlace estático tardío, debe usar 'static :: markTestSkipped ('');' en lugar de '$ this->'. Generará una advertencia en las nuevas versiones de PHP. Firma: 'función estática pública markTestSkipped ($ mensaje = '')' – DanFromGermany

+0

Necesita un mejor ejemplo del archivo de prueba de la unidad completa. No solo un fragmento. – Ligemer

21

Si usted puede hacer frente a ignorar todo el archivo a continuación

<?xml version="1.0" encoding="UTF-8"?> 

<phpunit> 

    <testsuites> 
     <testsuite name="foo"> 
      <directory>./tests/</directory> 
      <exclude>./tests/path/to/excluded/test.php</exclude> 
       ^------------- 
     </testsuite> 
    </testsuites> 

</phpunit> 
+0

Esto es lo que probé, aún dice 893 pruebas sin el '' y 893 pruebas con el '' – Filype

+0

Las pruebas tardan aproximadamente 20 minutos en ejecutarse, ¿hay alguna manera fácil de ver cuántas pruebas ejecutará? actualmente, tengo que esperar hasta que se complete la primera fila '....... 63/893 (7%)' – Filype

+3

@Filype: entonces probablemente haya especificado la ruta incorrecta. Funciona bien para mí No estoy seguro de si es posible hacer que las pruebas cuenten. PD: las pruebas unitarias no deberían durar tanto. Recomiendo usar la anotación '@ group' y dividir las pruebas por su naturaleza – zerkms

8

a veces es útil para saltar todos te pts de un archivo particular basado en condiciones personalizadas definidas como código php. Puede hacerlo fácilmente usando la función setUp en la que también funciona makeTestSkipped.

protected function setUp() 
{ 
    if (Config::getInstance()->myConfigCondition == false) { 
     $this->markTestSkipped('all tests in this file are invactive for this server configuration!'); 
    } 
} 

Por cierto PHPUnit 5.2 estable official documentation sugiere que se debe utilizar markTestSkipped como método de instancia, no es un método estático. No verifiqué si la definición se cambió en el camino.

+0

¿Qué es una clase '' 'Config'''? ¿Dónde lo coloco? – cronfy

+0

@cronfy puede ser cualquier clase accesible de alcance global (patrón de diseño Singleton/Register) o incluso una variable global establecida en el archivo bootstrap en phpunit. Básicamente, la lógica es: if ($ testsFromThisFileShouldBeSkipped) {$ this-> markTestSkipped (...); } –

Cuestiones relacionadas