2013-03-08 16 views
7

Mam skrypt wdrażania PHP, który chcę najpierw uruchomić testy PHPUnit, i zatrzymać się, jeśli testy się nie powiedzie. Często googlowałem i bardzo trudno jest znaleźć dokumentację dotyczącą uruchamiania testów jednostkowych z php, a nie z narzędzia wiersza poleceń.Czy możesz uruchomić testy PHPUnit ze skryptu?

Dla najnowszej wersji PHPUnit, można zrobić coś takiego:

$unit_tests = new PHPUnit('my_tests_dir'); 
$passed = $unit_tests->run(); 

korzystnie roztwór, który nie wymaga mnie ręcznie podać każdą zestaw testowy.

+0

statki phpunit ze źródła. Możesz [zajrzeć do testrunnera] (https://github.com/sebastianbergmann/phpunit/blob/master/PHPUnit/TextUI/TestRunner.php) zawiera kod do uruchomienia phpunit ze skryptu. – hakre

+0

Dobra wskazówka! Czy istnieje jakiś wcześniej wdrożony sposób na zebranie wszystkich moich pakietów testowych do uruchomienia? – Charles

+0

Jestem trochę zaskoczony, że nie jest to zbyt powszechna rzecz. Czy istnieje lepszy sposób na automatyczne uruchomienie wszystkich testów jednostkowych podczas wdrażania, na przykład podczas wdrażania? – Charles

Odpowiedz

5

Zdobione:

$phpunit = new PHPUnit_TextUI_TestRunner; 

try { 
    $test_results = $phpunit->dorun($phpunit->getTest(__DIR__, '', 'Test.php')); 
} catch (PHPUnit_Framework_Exception $e) { 
    print $e->getMessage() . "\n"; 
    die ("Unit tests failed."); 
} 
+0

w powyższym przykładzie, jak możemy uzyskać szczegóły raportu tekstowego z obiektu $ test_results? – emeraldjava

5

Najprostszym sposobem na to jest utworzenie instancji klasy PHPUnit_TextUI_Command.

Więc tutaj jest przykład:

require '/usr/share/php/PHPUnit/Autoload.php'; 

function dummy($input) 
{ 
    return ''; 
} 

//Prevent PHPUnit from outputing anything 
ob_start('dummy'); 

//Run PHPUnit and log results to results.xml in junit format 
$command = new PHPUnit_TextUI_Command; 
$command->run(array('phpunit', '--log-junit', 'results.xml', 'PHPUnitTest.php'), 
       true); 

ob_end_clean(); 

ten sposób wyniki będą rejestrowane w pliku w formacie Results.xml junit, który może być analizowany. Jeśli potrzebujesz innego formatu, sprawdź numer documentation. Możesz także dodać więcej opcji, zmieniając tablicę przekazaną do uruchomienia metody.

0

To nie wydaje się PHPUnit ma żadnego wbudowanego w konfiguracji, aby uchronić go przed dumpingiem swoje wyjście bezpośrednio do odpowiedzi (przynajmniej nie tak od PHPUnit 5.7).

Więc użyłem ob_start do manewrowania wyjście do zmiennej i ustaw trzeci argument doRun do false aby zapobiec PHPUnit z powstrzymaniem skrypt:

<?php 

$suite = new PHPUnit_Framework_TestSuite(); 
$suite->addTestSuite('App\Tests\DatabaseTests'); 

// Shunt output of PHPUnit to a variable 
ob_start(); 
$runner = new PHPUnit_TextUI_TestRunner; 
$runner->doRun($suite, [], false); 
$result = ob_get_clean(); 

// Print the output of PHPUnit wherever you want 
print_r($result); 
Powiązane problemy