我有一个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