J'ai une configuration XML très simple pour PHPUnit:
<phpunit bootstrap="/_tests/TestAutoload.php">
<testsuites>
<testsuite name="Unit Tests">
<directory suffix=".php">_tests</directory>
</testsuite>
</testsuites>
</phpunit>
Comment exclure certains fichiers de ce répertoire de la suite de tests? J'ai essayé <exclude>
et <blacklist>
, mais cela ne semble pas fonctionner dans ce contexte. Je n'ai pas pu trouver d'autre documentation que phpunit.de one, qui ne mentionne rien à ce sujet. Sinon, cette config fonctionne parfaitement.
Il existe un certain nombre de façons de ne pas exécuter un test particulier - le placer dans une liste noire afin qu'il ne soit jamais exécuté peut ne pas être le moyen - car le modifier signifie éditer la liste noire, et vous finirez souvent par le faire rebondir dans et hors du contrôle de version .
Il existe plusieurs autres méthodes qui peuvent être plus appropriées:
Si un test n'est pas encore prêt à être exécuté:
$this->markTestIncomplete('This test has not been implemented yet.');
S'il y a une raison extérieure à ne pas l'exécuter, sautez-la:
if (!extension_loaded('mysqli')) {
$this->markTestSkipped('The MySQLi extension is not available.');
}
Vous pouvez également mettre cela dans la fonction setUp()
, donc il sautera tous les tests dans une classe de test.
Vous pouvez faire dépendre un test de la réussite d'un test précédent:
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)
{
}
L'annotation @group -name- est l'une des meilleures façons d'arrêter spécifiquement ou d'exécuter un groupe de tests
/**
* @group database
* @group remoteTasks
*/
public function testSomething()
{
}
testSomething()
est maintenant dans deux groupes, et si l'un ou l'autre est ajouté sur la ligne de commande (ou dans le config.xml) --exclude-group
paramètre. il ne sera pas exécuté. De même, vous ne pouvez exécuter que des tests qui appartiennent à un groupe particulier - par exemple nommé d'après une fonctionnalité ou un rapport de bogue.
Pour exclure le nom de fichier TestCase.php
.
ajoutez ceci à votre phpunit.xml
<testsuites>
<testsuite name="BLABLA">
<directory suffix=".php">./tests</directory>
<exclude>./tests/TestCase.php</exclude>
</testsuite>
</testsuites>
Voici un extrait supplémentaire de ne suite de tests en direct Je peux confirmer qu'elle fonctionne avec:
...
<testsuites>
<testsuite name="n98-magerun-tests">
<directory>./tests</directory>
<exclude>tests/N98/Magento/Command/Installer/UninstallCommandTest.php</exclude>
</testsuite>
...
Avec ce fichier de configuration PHPUnit, j'ai fait de très bonnes expériences.
<?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>
documentation phpunit est un peu minimaliste en ce qui concerne l'exclusion dans une suite de tests. Apparemment, seuls des répertoires entiers peuvent être exclus mais pas les fichiers individuels . Je serais très heureux d'avoir tort. La solution de contournement semble utiliser la fonctionnalité @group comme publiée ci-dessus par Alister Bulman.
C'est un peu pénible de devoir marquer chaque test dans les suites de tests que j'aimerais conserver.
Pour Phpunit 6.5, exclude
est sous whitelist
<filter>
<whitelist>
<directory suffix=".php">src</directory>
<exclude>
<directory>src/Migrations</directory>
<file>src/kernel.php</file>
</exclude>
</whitelist>
</filter>
En plus des solutions ci-dessus, vous pouvez utiliser un flux de travail de test davantage axé sur l'architecture où vous gérez vos tests, répertoires et suites de tests à partir de phpunit.xml
comme ça:
tests/Unit
, tests/Feature
);<testsuite>
élément;All
qui combine tous les tests par défaut que vous exécuteriez en tant que suite de tests complète et affectez-la via defaultTestSuite="All"
touche dans <phpunit>
élément.Tinker
dédiée avec des tests que vous pourriez utiliser pour bricoler, conserver des exemples de tests, etc. que vous excluriez du flux de travail de test normal. Ne l'incluez pas dans la suite de tests All
.Vous pourrez ainsi:
phpunit
pour toujours exécuter les tests All
par défaut.phpunit --testsuite SuiteOne
,phpunit --filter SomeTest
ouphpunit --filter SomeTest::test_some_test_method
--testsuite
avec --filter
argumentsAssociez ce flux de travail à la possibilité d'exécuter le test ou le fichier de test actuel à partir de votre IDE (pour Sublime Text il y a Mac et Linux/Windows plugins) et vous serez complètement équipé pour choisir instantanément le test à exécuter.