Wie führe ich eine bestimmte phpunit xml-Testsuite aus?

82

Wie kann ich eine bestimmte Testsuite auswählen, die ausgeführt werden soll?

$ 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>
Andreas Linden
quelle

Antworten:

124

Hier ist der Code, als ob PHPUnit 3.7.13

$ phpunit --configuration config.xml --testsuite Library
$ phpunit --configuration config.xml --testsuite XXX_Form

Wenn Sie eine Gruppe der Testsuiten ausführen möchten, können Sie dies tun

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

Dann

$ phpunit --configuration config.xml --testsuite Both

Leider unterstützt PHPUnit solche verschachtelten Testsuiten derzeit nicht

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

Wenn Sie also Gruppen von Testsuiten auf diese Weise ausführen möchten, müssen Sie eine XML-Konfigurationsduplizierung durchführen!

Josh Woodcock
quelle
Ich habe das Problem, dass <Verzeichnis> einfach ignoriert wird. Keine Tests ausgeführt. Wenn ich die mit <Datei> spezifiziere, laufen sie gut, aber ich kann sie nicht alle manuell spezifizieren! Sie folgen der Konvention Test.php und dem Klassennamen. Idee?
Alexander Morland
Können Sie Ihre Konfigurationsdatei freigeben? Kleinere Details sind oft der Verdächtige.
Josh Woodcock
20

Dies ist in aktuellen Versionen von PHPUnit nicht möglich, wie aus diesen Nachrichten in der Mailingliste von phpunit-user hervorgeht: http://thread.gmane.org/gmane.comp.php.phpunit.user/1302

Es gibt aber auch eine Alternative: Sie können einfach einen Pfad zu phpunit übergeben.

phpunit library/XXX

Dies würde alle Tests im Verzeichnis library / XXX ausführen

Wenn dies für Sie nicht ausreicht, können Sie die Annotation @group verwenden , um Tests in verschiedene Kategorien zu unterteilen, die dann selektiv ausgeführt werden können.

Anti Veeranna
quelle
Nun, wie Sie in meinem Beitrag sehen können, ist dies nicht genau das, was ich brauche
Andreas Linden
Dann können Sie nichts tun, wie im ersten Link meiner Antwort ausgeführt.
Anti Veeranna
3

Ab phpunit 6.1 können Sie das Attribut in der XML-Konfigurationsdatei verwenden defaultTestSuite. Dies entspricht der Verwendung einer Standardoption phpunit --testsuite xxxund wird überschrieben.

Carlos C Soto
quelle
1

Eine andere Möglichkeit besteht darin, eine separate Konfigurationsdatei für jede Testsuite zu erstellen, die Sie separat testen möchten. Möglicherweise müssen Sie doppelte Einstellungen kopieren / einfügen, aber Sie können dann jede Konfigurationsdatei nach Bedarf angeben.

Mike Purcell
quelle
1

Die anderen Antworten hier sind richtig. Sie können dies nicht mit einer XML-Konfiguration tun. Sie können jedoch den gleichen Konfigurationstyp in PHP erstellen.

Es ist sicherlich nicht das Schönste, aber es sollte Ihnen die Funktionalität geben, die Sie benötigen würden.

Sie haben die XML-Konfiguration angegeben

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

Angenommen, Ihr Verzeichnis "Bibliothek" enthält hypothetisch 3 Dateien:

library
   XXX    
     FormTest.php
   Unit
     unittest1.php
     unittest2.php

Und dass jede der Dateien 1 Test nach perfekter Namenskonvention enthält, zB: FormTest enthält testForm ()

Für die Konfiguration erstellen wir eine Konfiguration, die alles enthält:

<?php
include_once "library/XXX/FormTest.php";
include_once "library/Unit/unittest1.php";
include_once "library/Unit/unittest2.php";

Dann erstellen wir eine Klasse nach den Namenskonventionen von phpunit. Sie können es so benennen, wie Sie möchten, da wir es nie verwenden werden ...

class LibraryConfigTest extends PHPUnit_Framework_TestCase {

Jede "Testsuite" ist einfach eine Methode, mit der die gewünschten Tests ausgeführt werden. Nennen Sie die Methoden, wie Sie wollen, denn wir werden sie nie wieder verwenden. Phpunit kümmert sich um das Laufen. Kommentieren Sie sie jedoch in Gruppen, damit Sie wissen, wie sie ausgeführt werden.

/**
 * 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();
   }
 }
 ?>

Um die gewünschte Funktionalität zu erhalten, führen Sie einfach die "Konfiguration" für die gewünschte Gruppe aus.

phpunit --group XXX_Form library_config.php
phpunit --group Library library_config.php

Wie gesagt, dies ist hässlich und sicherlich kein guter Code, da er ständig gewartet werden muss, aber Ihnen die Funktionalität bietet, die Sie suchen.

Hoffentlich wird Bergmann diese Funktionalität in seiner nächsten Runde hinzufügen, obwohl dies nicht wahrscheinlich erscheint, da er sie anscheinend so gut wie ignoriert .

SuperFamousGuy
quelle