2010-04-29 11 views
24

He siguiente, muy simple, de configuración XML para PHPUnit:¿Cómo excluir el archivo del paquete de prueba de PHPUnit en xml config?

<phpunit bootstrap="/_tests/TestAutoload.php"> 
    <testsuites> 
     <testsuite name="Unit Tests"> 
      <directory suffix=".php">_tests</directory> 
     </testsuite> 
    </testsuites> 
</phpunit> 

Cómo excluir ciertos archivos en este directorio desde el banco de pruebas? Intenté <exclude> y <blacklist>, pero parece que no funciona en este contexto. Además, no pude encontrar ninguna otra documentación que no sea phpunit.de, que no menciona nada al respecto. Aparte de eso, esta configuración funciona perfectamente.

+0

¿Estás tratando de evitar encontrarse con uno o más de su pruebas? –

+0

Sí, eso es precisamente lo que trato de hacer. 1 clase de prueba = 1 archivo. –

Respuesta

28

Hay un número de maneras de no ejecutar una prueba en particular - ponerlo en una lista negra de manera que nunca se ejecuta puede no ser la forma - como el cambio que significa la edición de la lista negra, y a menudo terminas rebotando dentro y fuera del control de la versión.

Hay varias otras maneras que pueden ser más apropiada:

Si una prueba aún no está listo para funcionar:

$this->markTestIncomplete('This test has not been implemented yet.'); 

Si hay una razón fuera de él no debe ser ejecutar, omitirlo:

if (!extension_loaded('mysqli')) { 
    $this->markTestSkipped('The MySQLi extension is not available.'); 
} 

También puede ponerlo en la función setUp(), por lo que omitirá todas las pruebas en una clase de prueba.

Puede hacer depender una prueba en una anterior éxito:

public function testEmpty() 
{ 
    $stack = array(); 
    $this->assertTrue(empty($stack)); 
    return $stack; // also sends this variable to any following tests - if this worked 
} 
/** 
* only runs if testEmpty() passed 
* 
* @depends testEmpty 
*/ 
public function testPush(array $stack) 
{ 
} 

La anotación -name- @group es una de las mejores formas de detener específicamente, o ejecutar un grupo de pruebas

/** 
* @group database 
* @group remoteTasks 
*/ 
public function testSomething() 
{ 
} 

testSomething() se encuentra ahora en dos grupos, y si bien se añade en la línea de comandos (o en el config.xml) --exclude-group parámetro. no se ejecutará. Del mismo modo, podría ejecutar solo las pruebas que pertenecen a un grupo en particular, por ejemplo, el nombre de una función o informe de error.

+0

"@group" era exactamente lo que estaba buscando. ¡Gracias! –

+0

Deseo que @group funcione dentro del nodo testsuite además del nodo phpunit en la configuración. Tuve que realizar una prueba antes de establecer una var estática para todas las demás pruebas. Así que puse esa prueba en una clase de prueba separada, con el nombre RunFirst.php y modifiqué mi configuración para ejecutar eso en una suite por sí mismo, pero antes de todas las otras suites. – b01

+0

¡Gracias por @group! – timbroder

-4

Hola, asegúrese de incluir sus exclusiones en la lista blanca. Ejemplo:

<phpunit> 
    <filter> 
     <blacklist> 
      <directory suffix=".php">/not/even/looked/at/</directory> 
     </blacklist> 
     <whitelist> 
      <directory suffix=".php">/path/to/test/dir/</directory> 
      <exclude> 
       <file suffix=".php">/path/to/fileToExclude.php</file> 
      </exclude> 
     </whitelist> 
    </filter> 
</phpunit> 

http://www.phpunit.de/manual/current/en/appendixes.configuration.html#appendixes.configuration.blacklist-whitelist

+13

Eso funciona solo para la cobertura del código, no para las pruebas en sí. –

6

Con este archivo de configuración de PHPUnit, he tenido muy buenas experiencias.

<?xml version="1.0" encoding="UTF-8"?> 
<phpunit 
    convertErrorsToExceptions="true" 
    convertNoticesToExceptions="true" 
    convertWarningsToExceptions="true" 
    colors="true" 
    processIsolation="true" 
    stopOnFailure="true" 
    syntaxCheck="false" 
    backupGlobals="false" 
    bootstrap="test-bootstrap.php"> 
    <testsuites> 
     <testsuite name="php-dba-cache"> 
      <directory suffix="Test.php">tests</directory> 
     </testsuite> 
    </testsuites> 
    <logging> 
     <log type="coverage-html" 
      target="build/coverage" 
      charset="UTF-8" 
      yui="true" 
      highlight="true" 
      lowUpperBound="35" 
      highLowerBound="70"/> 
    </logging> 
    <filter> 
     <whitelist addUncoveredFilesFromWhitelist="true"> 
      <directory suffix=".php">src</directory> 
      <exclude> 
      <file>test-bootstrap.php</file> 
      </exclude> 
     </whitelist> 
    </filter> 
</phpunit> 

https://github.com/gjerokrsteski/php-dba-cache

+5

¿En qué parte de esta configuración excluyes directorios/archivos? Las etiquetas son para la cobertura del código. –

4

El phpunit documentation es un poco minimalista cuando se trata de la exclusión en un banco de pruebas. Aparentemente, solo directorios enteros se pueden excluir pero no archivos individuales. Estaría muy feliz de que se demuestre que estoy equivocado. La solución parece estar utilizando la función @group como posted above por Alister Bulman.

Es un poco doloroso tener que etiquetar cada prueba en esas suites de prueba que me gustaría conservar.

15

Para excluir el nombre del archivo TestCase.php.

agregar esto a su phpunit.xml

<testsuites> 
    <testsuite name="BLABLA"> 
     <directory suffix=".php">./tests</directory> 
     <exclude>./tests/TestCase.php</exclude> 
    </testsuite> 
</testsuites> 

He aquí un extracto adicional de a real-live test-suite puedo confirmar que trabaja con:

... 
    <testsuites> 
     <testsuite name="n98-magerun-tests"> 
      <directory>./tests</directory> 
      <exclude>tests/N98/Magento/Command/Installer/UninstallCommandTest.php</exclude> 
     </testsuite> 
    ... 
+0

¿esto realmente funciona para usted? como en el comentario anterior (http://stackoverflow.com/a/15632735/2314626) excluir trabajos para directorios. su configuración propuesta aún falla con: No se encontraron pruebas en la clase "TestCase". –

+0

@ ElanRuusamäe: Sí, realmente funciona. Ese * comentario anterior * en realidad es una respuesta de hace años que incluso supuestamente se ha demostrado errónea. – hakre

+0

Confirmado. Tal vez no solía funcionar, pero ciertamente lo hace con phpunit 5.3, además de ser la respuesta más simple y clara. – petercoles

Cuestiones relacionadas