2010-09-08 6 views
53

Wie kann ich eine bestimmte Testsuite auswählen, die ausgeführt werden soll?Wie führe ich eine bestimmte phpunit XML Testsuite aus?

$ 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> 
+0

X-Ref: [Eine einzelne Testsuite standardmäßig in PHPUnit ausführen] (https://Stackoverflow.com/q/37820193/367456) – hakre

Antwort

76

Hier ist der Code ist, als ob PHPUnit 3.7.13

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

Wenn Sie eine Gruppe der Testsuite ausführen möchten, dann 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 derzeit keine verschachtelten Testsuits wie diese

Also, wenn Sie Gruppen von Test-Suites auf diese Weise laufen lassen wollten, müssen Sie XML-Konfigurationsduplizierung haben!

+0

Ich habe das Problem, dass einfach ignoriert wird. Keine Tests ausgeführt. Wenn ich die mit angeben, laufen sie gut, aber ich kann sie nicht alle manuell angeben! Sie folgen der Datei- und Klassennamenskonvention Test.php. Idee? –

+0

können Sie Ihre Konfigurationsdatei freigeben? Kleinere Details sind oft oft der Verdächtige. –

+0

http://stackoverflow.com/questions/15249469/phpunit-does-not-find-any-tests-with-director-xml-tag-but-does-with-some-file –

17

Diese in aktuellen Versionen von PHPUnit nicht möglich ist, wie sie durch diese Nachrichten in phpunit-User Mailing belegt Liste: http://thread.gmane.org/gmane.comp.php.phpunit.user/1302

Aber es gibt eine Alternative, Sie können einfach einen Pfad zu phpunit übergeben.

phpunit library/XXX 

Dies würde alle Tests in der Bibliothek/XXX-Verzeichnis ausgeführt

Wenn dies für Sie nicht ausreichend ist, ist eine weitere Option, um die @group annotation zu verwenden Tests in verschiedene Kategorien zu unterteilen, die dann selektiv ausgeführt werden könnten.

+0

Nun, wie Sie in meinem Beitrag sehen können, ist dies nicht genau das, was ich brauche –

+0

Dann gibt es nichts, was Sie tun können, wie im ersten Link meiner Antwort darauf hingewiesen. –

2

Eine weitere Option ist das Erstellen einer separaten Konfigurationsdatei für jede Testsuite, die Sie separat testen möchten. Es gibt einen gewissen Mehraufwand darin, dass Sie möglicherweise doppelte Einstellungen kopieren/einfügen müssen, aber Sie könnten dann jede Konfigurationsdatei nach Bedarf angeben.

1

Die anderen Antworten hier sind korrekt. Sie können dies nicht mit einer XML-Konfiguration tun, was Sie tun können, ist die gleiche Art von Konfiguration in PHP.

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

Sie bereitgestellt, um die XML-Konfigurations

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

Hypothetisch, lassen Sie uns Ihr Verzeichnis "Bibliothek", sagen enthält 3 Dateien:

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

Und dass jede der Dateien enthält 1-Test durch perfekte Namenskonvention, 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 durch die phpunit Namenskonventionen. Sie können es nennen, was Sie wollen, wie wir es nie wirklich verwenden ...

class LibraryConfigTest extends PHPUnit_Framework_TestCase { 

Jede „Testsuite“ wird einfach eine Methode sein, die die Tests laufen Sie wollen. Benenne die Methoden wie du willst, wir werden sie nie wieder benutzen. Phpunit kümmert sich um den Lauf. Achten Sie jedoch darauf, sie in Gruppen zu kommentieren, 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 nun die Funktionalität, die Sie gerade die „config“ gegen die Gruppe, die Sie wollen laufen wollen zu bekommen.

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

Wie gesagt, das ist hässlich und schon gar nicht guten Code, da es eine ständige Wartung erfordern wird, aber es wird Ihnen die Funktionalität, die Sie suchen.

Hoffentlich wird Bergmann diese Funktionalität in seiner nächsten Runde hinzufügen, obwohl es nicht wahrscheinlich erscheint, da er so aussieht wie ignoring it.

2

Ab phpunit 6.1 können Sie in der XML-Konfigurationsdatei das Attribut defaultTestSuite verwenden, das ist wie mit einer Standardoption phpunit --testsuite xxx und wird überschrieben.

Verwandte Themen