Можете ли вы запустить тесты PHPUnit из сценария?

У меня есть сценарий развертывания PHP, который я хочу сначала запустить PHPUnit, и остановимся, если тесты не сработают. Я много разбираюсь в этом, и очень сложно найти документацию по запуску модульных тестов из php, а не из инструмента командной строки.

Для новейшей версии PHPUnit вы можете сделать что-то вроде:

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

Предпочтительно решение, которое не требует, чтобы я вручную указывал каждый набор тестов.

Solutions Collecting From Web of "Можете ли вы запустить тесты PHPUnit из сценария?"

Догадаться:

 $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."); } 

Самый простой способ сделать это – создать экземпляр объекта класса PHPUnit_TextUI_Command.

Итак, вот пример:

 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(); 

Таким образом, результаты будут регистрироваться в файле results.xml в формате junit, который может быть проанализирован. Если вам нужен другой формат, вы можете проверить документацию . Также вы можете добавить дополнительные параметры, изменив массив, переданный методу запуска.

Похоже, что PHPUnit не имеет встроенной конфигурации, чтобы не допустить ее сброса непосредственно в ответ (по крайней мере, не от PHPUnit 5.7).

Итак, я использовал ob_start для вывода вывода в переменную и установил третий аргумент doRun в false чтобы предотвратить остановку PHPUnit скрипта:

 <?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); - <?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);