comment choisir une suite de tests spécifique à exécuter?
$ phpunit --configuration config.xml
config.xml:
<testsuites>
<testsuite name="Library">
<directory>library</directory>
</testsuite>
<testsuite name="XXX_Form">
<file>library/XXX/FormTest.php</file>
<directory>library/XXX/Form</directory>
</testsuite>
</testsuites>
Voici le code comme si PHPUnit 3.7.13
$ phpunit --configuration config.xml --testsuite Library
$ phpunit --configuration config.xml --testsuite XXX_Form
Si vous souhaitez exécuter un groupe de suites de tests, vous pouvez le faire
<testsuites>
<testsuite name="Library">
<directory>library</directory>
</testsuite>
<testsuite name="XXX_Form">
<file>library/XXX/FormTest.php</file>
<directory>library/XXX/Form</directory>
</testsuite>
<testsuite name="Both">
<directory>library</directory>
<file>library/XXX/FormTest.php</file>
<directory>library/XXX/Form</directory>
</testsuite>
</testsuites>
Ensuite
$ phpunit --configuration config.xml --testsuite Both
Malheureusement, PHPUnit ne prend actuellement pas en charge les suites de tests imbriquées comme celle-ci.
<testsuites>
<testsuite name="Both">
<testsuite name="Library">
<directory>library</directory>
</testsuite>
<testsuite name="XXX_Form">
<file>library/XXX/FormTest.php</file>
<directory>library/XXX/Form</directory>
</testsuite>
</testsuite>
</testsuites>
Donc, si vous souhaitez exécuter des groupes de suites de tests de cette façon, vous devez avoir une duplication de configuration xml!
Ce n'est pas possible dans les versions actuelles de PHPUnit comme en témoignent ces messages dans la liste de diffusion des utilisateurs de phpunit: http://thread.gmane.org/gmane.comp.php.phpunit.user/1302
Mais il existe une alternative, vous pouvez simplement passer un chemin vers phpunit.
phpunit library/XXX
Cela exécuterait tous les tests dans le répertoire bibliothèque/XXX
Si cela ne vous suffit pas, une autre option consiste à utiliser @ annotation de groupe pour diviser les tests en différentes catégories qui pourraient ensuite être exécutées de manière sélective.
Depuis phpunit 6.1, vous pouvez utiliser dans le fichier de configuration xml l'attribut defaultTestSuite
, c'est comme utiliser une option par défaut phpunit --testsuite xxx
et est remplacé.
Une autre option consiste à créer un fichier de configuration distinct pour chaque suite de tests que vous souhaitez tester séparément. Il y a des frais généraux dans le sens où vous devrez peut-être copier/coller des paramètres en double, mais vous pourrez alors spécifier chaque fichier de configuration selon vos besoins.
Les autres réponses ici sont correctes. Vous ne pouvez pas faire cela en utilisant une configuration xml, mais vous pouvez faire le même type de configuration en php.
Ce n'est certainement pas la plus jolie chose, mais cela devrait vous donner les fonctionnalités dont vous auriez besoin.
Vous avez fourni la configuration xml
<testsuites>
<testsuite name="Library">
<directory>library</directory>
</testsuite>
<testsuite name="XXX_Form">
<file>library/XXX/FormTest.php</file>
<directory>library/XXX/Form</directory>
</testsuite>
</testsuites>
En théorie, disons que votre répertoire "bibliothèque" contient 3 fichiers:
library
XXX
FormTest.php
Unit
unittest1.php
unittest2.php
Et que chacun des fichiers contient 1 test par convention de dénomination parfaite, par exemple: FormTest contient testForm ()
Pour la configuration, nous allons créer une configuration qui contient tout:
<?php
include_once "library/XXX/FormTest.php";
include_once "library/Unit/unittest1.php";
include_once "library/Unit/unittest2.php";
Ensuite, nous créerons une classe selon les conventions de dénomination phpunit. Vous pouvez le nommer comme vous le souhaitez, car nous ne l'utilisons jamais ...
class LibraryConfigTest extends PHPUnit_Framework_TestCase {
Chaque "suite de tests" sera simplement une méthode qui exécute les tests que vous souhaitez. Nommez les méthodes comme vous le souhaitez car, encore une fois, nous ne les utiliserons jamais réellement. Phpunit se chargera du fonctionnement. Assurez-vous de les commenter en groupes pour savoir comment exécuter.
/**
* All Tests in Library
* @group Library
**/
public function testLibrary() {
UnitTest1::testUnit1();
UnitTest2::testUnit2();
FormTest::testForm();
}
/**
* All Form tests in library/XXX
* @group XXX_Form
**/
public function testForm() {
FormTest::testForm();
}
}
?>
Maintenant, pour obtenir la fonctionnalité que vous voulez, lancez simplement la "config" contre le groupe que vous voulez.
phpunit --group XXX_Form library_config.php
phpunit --group Library library_config.php
Comme je l'ai dit, ce code est moche et certainement pas bon car il nécessitera une maintenance constante, mais il vous donnera les fonctionnalités que vous recherchez.
Espérons que Bergmann ajoutera cette fonctionnalité lors de son prochain tour, bien que cela ne semble pas probable car il semble être à peu près l'ignorant .