PHPUnit 测试命令行脚本与覆盖率



我正在开发一个使用 PHP Class 的命令行工具。我为我的课程做了覆盖率的测试。

现在我想测试我在命令行中使用的PHP脚本。

我找到了如何使用以下线程触发命令行:如何使用 PHPUnit 测试命令行程序?

我想知道如何覆盖在命令行脚本中执行的行。

我试图像这样进行测试:

class CommandTest extends PHPUnit_Framework_TestCase
{
    protected static $command = './src/Command.php ';
    protected static $testWorkingDir = 'tests/Command';
    public function testCLIInstall()
    {
        $command = self::$command . ' --help';
        $output = `$command`;
    }
}

执行成功完成,但文件"命令.php中没有涵盖任何内容。

首先,可能吗?然后,如果是,我该如何为封面命令行脚本做什么?

非常感谢大家。

此致敬意

新冲击波。

更新:我在GitHub上打开了一个问题:https://github.com/sebastianbergmann/phpunit/issues/2817

当你开始测试时,你有一个php解释器的实例,它当前正在处理你的测试脚本。

测试脚本调用命令行,命令行调用 php 解释器的第二个实例。右?

现在你有两个口译员在运行,他们彼此完全分开,没有任何钱知道其他口译员现在在做什么。

因此,测试中的 xdebug 不知道命令脚本中使用了哪些代码行,哪些代码行没有。

我认为最适合您的解决方案是分离您的命令的类:

//Command.php
class Command
{
}

和命令的索引脚本:

//command_index.php
(new Command($argv))->run();

因此,您可以在测试套件中测试命令的类,并将command_index.php排除在覆盖范围之外。

最新更新