2012-08-30 8 views
13

Mam problem przy użyciu wiersza polecenia, aby uruchomić testy: jeśli biegnę PHPUnit tak:nie można uruchomić pojedynczy test z dostawcą danych w PHPUnit

phpunit -–no-configuration -–filter testAdd DataTest DataProviderTest.php 

to działa dobrze. Ale używamy wyrażeń regularnych, aby określić dokładnie nazwę metody, które chcemy być testowane:

phpunit -–no-configuration -–filter /::testAdd$/ DataTest DataProviderTest.php 

Drugie podejście nie działa niestety. Kod źródłowy jest:

<?php 
class DataTest extends PHPUnit_Framework_TestCase 
{ 
    /** 
    * @dataProvider provider 
    */ 
    public function testAdd($a, $b, $c) 
    { 
     $this->assertEquals($c, $a + $b); 
    } 

    public function provider() 
    { 
     return array(
      array(0, 0, 0), 
      array(0, 1, 1), 
      array(1, 0, 1), 
      array(1, 1, 3) 
     ); 
    } 
} 

?> 

Odpowiedz

1

W tym przypadku regex jest porównywana następujący ciąg:

DataTest::testAdd with data set #0 
DataTest::testAdd with data set #1 
... 

Więc naturalnie Twój regex testAdd$ nie będzie działać.

6

Podobnie jak @sjoerd wskazał, że nazwa, która zostanie dopasowana, zawiera numer zbioru danych.

Oznacza to, że to działa:

phpunit --filter "testAdd with data set #0" DataTest DataProviderTest.php 

przeciwko pliku produkuje:

PHPUnit 3.7.0RC1 by Sebastian Bergmann. 

. 

Time: 0 seconds, Memory: 5.25Mb 

OK (1 test, 1 assertion) 

przetestowany w PHPUnit 3.5 i wzwyż.


To nie jest naprawdę dość i mający inną składnię tego ciągu PHPUnit jest zdecydowanie lepsze, ale na razie może to rozwiązać problem i gdy ktoś wysyła PR będzie ładniejszy używać;)

śledzenie problemów dla ładniejszy składni na phpunit github issue tracker

13

regex do obsługi testów z lub bez zestawów danych jest

phpunit --filter "/::<method>(with data set .*)?$/" <class> <file> 

Na przykład

phpunit --filter "/::testAdd(with data set .*)?$/" DataTest DataProviderTest.php 

ponieważ metody badania nie będą miały miejsca w nazwie, chyba że ma zestaw danych, można naprawdę kurczyć to

phpunit --filter "/::testAdd(.*)?$/" DataTest DataProviderTest.php 
+2

Nicea przykład! Zauważ, że liczba zestawów danych również może ciągiem (nazwane DataProvider'ów wykorzystaniem kluczy tablicy w zbiorach danych) więc \ d + może nie przechwycić wszystkiego, ale 'phpunit --filter"/:: test. + (z dat zestaw #. +)?$/"' lub coś jest bardzo fajnym sposobem na uruchomienie wszystkich testów z dostawcami danych;) – edorian

+0

@edorian - Good call Zmieniłem go na '. *', aby przechwycić dowolny zestaw danych –

+0

Myślę, że nowa składnia dla '- -filter' jest zawsze łatwiejszy https://phpunit.de/manual/current/en/textui.html#textui.examples.filter-patterns – martin

1

regex odpowiedź nie jest już wydaje się działać (przynajmniej nie w 4.0.12).

Wygląda --filter nie lubi przestrzeń i daje następujący błąd:

Fatal error: „preg_match(): Kompilacja nie powiodła się: brak) w offsecie

ten jest ustalony przez zastępując przestrzeń \ s cytaty muszą również zostaną usunięte (albo też \ musi być \)

phpunit --filter /::testAdd(\s.*)?$/ DataTest DataProviderTest.php 
+0

Brakowało ci cudzysłowów wokół wyrażenia regularnego, traktując je jako pojedynczy parametr w poleceniu- linia. –

Powiązane problemy