Jak uruchomić określony zestaw testowy PHPunit XML?

85

jak wybrać konkretny pakiet testowy do wykonania?

$ 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
źródło
X-Ref: Domyślne
uruchamianie

Odpowiedzi:

129

Oto kod, jakby PHPUnit 3.7.13

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

Jeśli chcesz uruchomić grupę zestawów testów, możesz to zrobić

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

Następnie

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

Niestety PHPUnit obecnie nie obsługuje zagnieżdżonych zestawów testowych, takich jak ten

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

Więc jeśli chcesz uruchomić grupy zestawów testów w ten sposób, musisz mieć zduplikowaną konfigurację xml!

Josh Woodcock
źródło
Mam problem, że <katalog> jest po prostu ignorowany. Nie wykonano żadnych testów. Jeśli podam z <file>, działają dobrze, ale nie mogę określić ich wszystkich ręcznie! Są zgodne z konwencją nazw plików Test.php i klas. Pomysł?
Alexander Morland,
czy możesz udostępnić swój plik konfiguracyjny? Często podejrzanymi są drobne szczegóły.
Josh Woodcock,
20

Nie jest to możliwe w obecnych wersjach PHPUnit, o czym świadczą te wiadomości na liście mailingowej phpunit-user: http://thread.gmane.org/gmane.comp.php.phpunit.user/1302

Ale jest alternatywa, możesz po prostu przekazać ścieżkę do phpunita.

phpunit library/XXX

Spowoduje to uruchomienie wszystkich testów w katalogu library / XXX

Jeśli to nie wystarczy, inną opcją jest użycie adnotacji @group w celu podzielenia testów na różne kategorie, które można następnie przeprowadzić selektywnie.

Anti Veeranna
źródło
cóż, jak widać w moim poście, to nie jest dokładnie to, czego potrzebuję
Andreas Linden
W takim razie nic nie możesz zrobić, jak wskazałem w pierwszym linku mojej odpowiedzi.
Anti Veeranna
3

Od phpunit 6.1 możesz użyć atrybutu w pliku konfiguracyjnym xml defaultTestSuite, jest to jak użycie domyślnej opcji phpunit --testsuite xxxi jest nadpisane.

Carlos C Soto
źródło
1

Inną opcją jest utworzenie osobnego pliku konfiguracyjnego dla każdego zestawu testowego, który chcesz osobno przetestować. Jest pewien narzut, ponieważ być może będziesz musiał skopiować / wkleić zduplikowane ustawienia, ale możesz wtedy określić każdy plik konfiguracyjny w razie potrzeby.

Mike Purcell
źródło
1

Pozostałe odpowiedzi są poprawne. Nie możesz tego zrobić za pomocą konfiguracji xml, ale możesz zrobić ten sam typ konfiguracji w php.

Z pewnością nie jest to najładniejsza rzecz, ale powinna zapewniać funkcjonalność, której potrzebujesz.

Podałeś plik config

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

Hipotetycznie załóżmy, że Twój katalog „biblioteka” zawiera 3 pliki:

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

I że każdy z plików zawiera 1 test według doskonałej konwencji nazewnictwa, np .: FormTest zawiera testForm ()

Dla konfiguracji stworzymy konfigurację zawierającą wszystko:

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

Następnie utworzymy klasę zgodnie z konwencjami nazewnictwa phpunit. Możesz nazwać to, co chcesz, ponieważ nigdy go nie użyjemy ...

class LibraryConfigTest extends PHPUnit_Framework_TestCase {

Każdy „zestaw testów” będzie po prostu metodą, która uruchamia wymagane testy. Nazwij metody, jak chcesz, ponieważ po raz kolejny nigdy ich nie użyjemy. Phpunit zajmie się uruchomieniem. Pamiętaj jednak, aby skomentować je w grupach, aby wiedzieć, jak wykonać.

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

Teraz, aby uzyskać żądaną funkcjonalność, wystarczy uruchomić „config” dla wybranej grupy.

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

Jak powiedziałem, jest to brzydki i na pewno nie dobry kod, ponieważ będzie wymagał ciągłej konserwacji, ale zapewni funkcjonalność, której szukasz.

Miejmy nadzieję, że Bergmann doda tę funkcję w swojej następnej rundzie, chociaż nie wydaje się to prawdopodobne, ponieważ wydaje się, że prawie ją ignoruje .

SuperFamousGuy
źródło