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>
Antworten:
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!
quelle
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.
quelle
Ab phpunit 6.1 können Sie das Attribut in der XML-Konfigurationsdatei verwenden
defaultTestSuite
. Dies entspricht der Verwendung einer Standardoptionphpunit --testsuite xxx
und wird überschrieben.quelle
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.
quelle
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 .
quelle