我有一個PHP部署腳本,我想先運行PHPUnit測試,並在測試失敗時停止。我一直在使用googling,很難找到關於從php運行單元測試的文檔,而不是從命令行工具。你可以從腳本運行PHPUnit測試嗎?
對於PHPUnit的最新版本,你可以這樣做:
$unit_tests = new PHPUnit('my_tests_dir');
$passed = $unit_tests->run();
最好,不需要我來手動指定每個測試套件的解決方案。
我有一個PHP部署腳本,我想先運行PHPUnit測試,並在測試失敗時停止。我一直在使用googling,很難找到關於從php運行單元測試的文檔,而不是從命令行工具。你可以從腳本運行PHPUnit測試嗎?
對於PHPUnit的最新版本,你可以這樣做:
$unit_tests = new PHPUnit('my_tests_dir');
$passed = $unit_tests->run();
最好,不需要我來手動指定每個測試套件的解決方案。
想通了:
$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.");
}
在上面的示例中,我們如何從$ test_results對象獲取文本報告詳細信息? – emeraldjava 2017-07-28 15:23:31
最簡單的方法是通過實例化類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();
這樣的結果會在JUnit的格式results.xml文件,可以解析被記錄。如果你需要不同的格式,你可以檢查documentation。您也可以通過更改傳遞給run方法的數組來添加更多選項。
它似乎並不像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);
PHPUnit的船舶。你可以[看看testrunner](https://github.com/sebastianbergmann/phpunit/blob/master/PHPUnit/TextUI/TestRunner.php)它包含了從腳本運行phpunit的代碼。 – hakre 2013-03-08 20:14:25
好提示!是否有任何預先實施的方法來收集我的所有測試套件來運行? – Charles 2013-03-08 21:46:53
我有點驚訝,這不是一件很常見的事情。有沒有更好的方法來在部署時進行所有的單元測試? – Charles 2013-03-08 22:00:27