¿Cómo omitir pruebas en PHPunit?

4 minutos de lectura

avatar de usuario
filipe

Estoy usando phpunit en conexión con jenkins y quiero omitir ciertas pruebas estableciendo la configuración en el archivo XML phpunit.xml

Sé que puedo usar en la línea de comando:

phpunit --filter testStuffThatBrokeAndIOnlyWantToRunThatOneSingleTest

¿Cómo traduzco eso al archivo XML desde el <filters> ¿La etiqueta es solo para cobertura de código?

Me gustaría ejecutar todas las pruebas excepto testStuffThatAlwaysBreaks

  • KO: ¿Qué hay de arreglar la prueba? por cierto, hola de welly 😉

    – zerkms

    20 de abril de 2012 a las 2:00


  • No escribí las pruebas, es algo irrelevante y tampoco quiero cambiar los archivos principales.

    – filipe

    20 de abril de 2012 a las 2:56

  • Dudo que puedas hacerlo. Es un requisito muy extraño.

    – zerkms

    20 de abril de 2012 a las 3:01


  • PD: mencionó filtros, pero no pudo ayudarlo, porque excluye toda la ruta. De lo contrario <exclude> – haría el trabajo por ti

    – zerkms

    20 de abril de 2012 a las 3:03

  • ¿Puede publicar el archivo phpunit.xml.dist propuesto?

    – filipe

    20 de abril de 2012 a las 3:36

avatar de usuario
jsteinmann

La forma más rápida y fácil de omitir las pruebas que están rotas o en las que necesita continuar trabajando más adelante es simplemente agregar lo siguiente en la parte superior de su prueba de unidad individual:

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

  • siempre puede agregar directorios o pruebas al archivo de configuración xml, sin embargo, si se trata de un controlador o similar, eso no es muy práctico porque probablemente tenga docenas de otras pruebas en ese archivo. Supongo que si no tiene acceso a las pruebas unitarias, no estoy seguro de entender por qué, entonces no tiene otra opción que excluir.

    – jsteinmann

    29 de noviembre de 2012 a las 0:39

  • Como es un método estático (al menos en PHPUnit 3), y algunas clases usan enlace estático tardío afaik, debe usar static::markTestSkipped(''); en vez de $this->. Generará una advertencia en las versiones más nuevas de PHP. Firma: public static function markTestSkipped($message = '')

    – Daniel W.

    20 de julio de 2015 a las 14:11

  • Necesita un mejor ejemplo del archivo de prueba de unidad completa. No solo un fragmento.

    – Ligemer

    5 de junio de 2017 a las 21:57

  • @DanielW. la manual oficial de phpunit tiene ejemplos que muestran $this->markTestSkipped()

    – nulo

    1 oct 2020 a las 9:47

  • @nulll puedes ver en el código fuente de 6.5, markTestSkipped() sigue siendo un método estático.

    – Daniel W.

    1 oct 2020 a las 13:20

Si puede lidiar con ignorar todo el archivo, entonces

<?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>

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

    – filipe

    20 de abril de 2012 a las 3:58


  • @Filype: entonces probablemente especificó 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 tiempo. recomendaría usar @group anotación y pruebas divididas por su naturaleza

    – zerkms

    20 de abril de 2012 a las 4:19

avatar de usuario
Konrad Gałęzowski

A veces es útil omitir todas las pruebas de un archivo en particular según las condiciones personalizadas definidas como código php. Puede hacerlo fácilmente usando la función de configuración en la que también funciona makeTestSkipped.

protected function setUp()
{
    if (your_custom_condition) {
        $this->markTestSkipped('all tests in this file are invactive for this server configuration!');
    }
}

tu_condición_personalizada se puede pasar a través de algún método/propiedad de clase estática, una constante definida en el archivo de arranque de phpunit o incluso una variable global.

  • que es un Config ¿clase? ¿Dónde lo coloco?

    – crono

    5 de octubre de 2016 a las 9:28

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

    – Konrad Gałęzowski

    7 oct 2016 a las 11:41


  • elimine el condicional y su respuesta sería sencilla … “marcarTestOmitido dentro de la configuración para omitir todo el archivo”

    – Chispa – chispear

    12 de junio de 2019 a las 21:49

  • @SparK Veo tu punto, pero estaba proporcionando una forma de condicional saltarse toda la clase de prueba. Lo he cambiado un poco, eliminando mi forma personalizada de hacerlo a favor de la regla general.

    – Konrad Gałęzowski

    14 de junio de 2019 a las 8:43


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad