unit testing - tutorial - ¿Cómo excluir un archivo de la suite de prueba PHPUnit en la configuración xml?
phpunit tutorial español (5)
Tengo siguiente, muy simple, configuración XML para PHPUnit:
<phpunit bootstrap="/_tests/TestAutoload.php">
<testsuites>
<testsuite name="Unit Tests">
<directory suffix=".php">_tests</directory>
</testsuite>
</testsuites>
</phpunit>
¿Cómo excluir cierto archivo en este directorio de la suite de prueba? Intenté <exclude>
y <blacklist>
, pero no parece funcionar en este contexto. Tampoco se pudo encontrar otra documentación que phpunit.de sea phpunit.de , que no menciona nada al respecto. Más que eso, esta configuración funciona perfectamente.
Con este archivo de configuración 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>
Hay varias formas de no ejecutar una prueba en particular: colocarla en una lista negra para que nunca se ejecute puede que no sea la forma, ya que cambiarla implica editar la lista negra y, a menudo, terminará rebotándola dentro y fuera del control de versiones. .
Hay varias otras formas que pueden ser más apropiadas:
Si una prueba aún no está lista para ejecutarse:
$this->markTestIncomplete(''This test has not been implemented yet.'');
Si hay una razón externa por la que no se debe ejecutar, omítelo:
if (!extension_loaded(''mysqli'')) {
$this->markTestSkipped(''The MySQLi extension is not available.'');
}
También puede poner eso en la función setUp()
, por lo que omitirá todas las pruebas en una clase de prueba.
Puede hacer que una prueba dependa de una anterior que tenga é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 de @grupo de grupo es una de las mejores maneras de detener o ejecutar específicamente un grupo de pruebas
/**
* @group database
* @group remoteTasks
*/
public function testSomething()
{
}
testSomething()
ahora está en dos grupos, y si alguno se agrega en la línea de comando (o en el parámetro config.xml) --exclude-group
. no se ejecutará Del mismo modo, solo puede ejecutar pruebas que pertenezcan a un grupo en particular, por ejemplo, el nombre de una característica o informe de error.
Hola, asegúrate de poner tus 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>
La documentación de phpunit es un poco minimalista cuando se trata de la exclusión en un testuite. Aparentemente, solo se pueden excluir directorios completos pero no archivos individuales . Yo estaría muy feliz de ser probado mal. La solución parece estar utilizando la función @grupo publicada anteriormente por Alister Bulman.
Es un poco doloroso tener que etiquetar todas las pruebas en las suites de pruebas que me gustaría mantener.
Para excluir el nombre del archivo TestCase.php
.
agrega esto a tu phpunit.xml
<testsuites>
<testsuite name="BLABLA">
<directory suffix=".php">./tests</directory>
<exclude>./tests/TestCase.php</exclude>
</testsuite>
</testsuites>
Aquí hay un extracto adicional de un conjunto de pruebas en vivo real con el que puedo confirmar que funciona:
...
<testsuites>
<testsuite name="n98-magerun-tests">
<directory>./tests</directory>
<exclude>tests/N98/Magento/Command/Installer/UninstallCommandTest.php</exclude>
</testsuite>
...