2012-04-20 18 views
21

Obecnie mam problem, że muszę pracować w starszej wersji kodu, aby nasza interakcja z rozszerzeniem PHP działała prawidłowo (Singleton Testing Question).Jak ustalić, czy testy PHPUnit są uruchomione?

W związku z tym nie chcę wykonywać tego kodu podczas uruchamiania naszego normalnego kodu produkcyjnego z aplikacją. Dlatego muszę sprawdzić zwykły kod PHP, jeśli wykonywany kod jest wykonywany w ramach testu, czy nie.

Wszelkie sugestie, jak to ustalić? Myślałem o zdefiniowanej zmiennej związanej z obecnością samych plików testowych (nie wysyłamy testów do klientów), ale nasi programiści potrzebują rozszerzenia, aby działał normalnie, podczas gdy serwer CI musi uruchomić testy.

Czy zalecany jest zbiór globalny w pliku PHPUnit.xml? Inne przemyślenia?

Odpowiedz

23

Definiowanie stałej w pliku PHPUnit bootstrap.php. Jest to wykonywane przed załadowaniem lub uruchomieniem jakichkolwiek testów. Nie powinno to wpływać na programistów, którzy normalnie uruchamiają aplikację - tylko testy jednostkowe.

+0

Dzięki. Działa to jak urok i wciąż mogę wykryć moje środowisko programistyczne dla innych procesów kodu. –

+0

Doskonały, działał świetnie tutaj. Dziękuję bardzo. – GoinAum

29

Alternatywnym podejściem jest set a constant in the PHP section of your phpunit.xml.*:

<php> 
    <const name="PHPUNIT_YOURAPPLICATION_TESTSUITE" value="true"/> 
</php> 

W aplikacji PHP, możesz potem wykorzystać następujące sprawdzenia:

if (defined('PHPUNIT_YOURAPPLICATION_TESTSUITE') && PHPUNIT_YOURAPPLICATION_TESTSUITE) 
{ 
    echo 'TestSuite running!'; 
} 
+0

Należy pamiętać, że PHP dziwnie ocenia nieokreśloną stałą jako ciąg znaków (jeśli "PRZYKŁAD" nie jest zdefiniowany, jest on oceniany jako ''PRZYKŁAD'' .Oznacza, że ​​należy go poprawnie oszacować przy użyciu '==='. nadal wysyła powiadomienie o niezdefiniowanej stałej –

+2

Nie będzie "===" również pasuje do typu up, a ponieważ jest zdefiniowany jako 'true' (a boolean), ale sprawdza czy jest' 1' (liczba całkowita) , to się nie uda? Rozumiem twój komentarz, ale w tym przykładzie '==' jest lepszy –

+3

Dzięki twojej odpowiedzi odkryłem, że (w 'Laravel 5')' APP_ENV' jest ustawione na 'testing'. Odpowiedź jest bardzo łatwa: naprawdę polecam to rozwiązanie dla Laravel: –

10

mógł sprawdzić różne sposoby.

if(PHP_SAPI == 'cli') { 

    if(strpos($_SERVER['argv'][0], 'phpunit') !== FALSE) { ... } 
    // or 
    if($_SERVER['argv'][0] == '/usr/bin/phpunit') { ... } 

} 
+2

$ _SERVER ['argv'] [0] zamiast $ argv [0] –

1

Używam pliku dziennika Laravel do ustalenia, czy testy PHPUnit są uruchomione.

+5

W Laravel phpunit.xml ustawia 'APP_ENV' na' testowanie.) Może to dla ciebie łatwiejsze niż plik dziennika? (tylko sugestia) –

+0

Dzięki, dobrze wiedzieć. –

Powiązane problemy