PHPUnit тестовый скрипт командной строки с покрытием

Я разрабатываю инструмент командной строки, который использует класс PHP.
Я сделал тесты для моих классов с покрытием.

Теперь я хотел бы протестировать мой PHP Script, который используется в командной строке.

Я нашел, как вызвать командную строку со следующим потоком:
Как проверить программу командной строки с помощью 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`;
}
}

Выполнение выполнено успешно, но в файле «Command.php» ничего не скрыто.

Во-первых, возможно ли это?
Тогда, если это так, как я могу сделать для покрытия сценария командной строки?

Большое спасибо за все.

С уважением,

Neoblaster.

Обновление: я открываю вопрос на GitHub: https://github.com/sebastianbergmann/phpunit/issues/2817

1

Решение

Когда вы запускаете тесты, у вас есть один экземпляр интерпретатора php, который в настоящее время обрабатывает сценарии ваших тестов.

Ваш тестовый скрипт вызывает командную строку, которая вызывает второй экземпляр интерпретатора php. Правильно?

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

Таким образом, xdebug из вашего теста не знает, какие строки кода использовались в сценарии вашей команды, а какие — нет.

Я думаю, что лучшее решение для вас — разделить класс вашей команды:

//Command.php
class Command
{
}

и индексный скрипт вашей команды:

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector