web-dev-qa-db-fra.com

Comment exécuter une suite de tests phpunit xml spécifique?

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>
74
Andreas Linden

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!

111
Josh Woodcock

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.

20
Anti Veeranna

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é.

3
Carlos C Soto

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.

1
Mike Purcell

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 .

1
SuperFamousGuy