Я разрабатываю инструмент командной строки, который использует класс 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
Когда вы запускаете тесты, у вас есть один экземпляр интерпретатора php, который в настоящее время обрабатывает сценарии ваших тестов.
Ваш тестовый скрипт вызывает командную строку, которая вызывает второй экземпляр интерпретатора php. Правильно?
Теперь у вас работают два переводчика, и они полностью отделены друг от друга, и у вас нет возможности узнать, что сейчас делает другой переводчик.
Таким образом, xdebug из вашего теста не знает, какие строки кода использовались в сценарии вашей команды, а какие — нет.
Я думаю, что лучшее решение для вас — разделить класс вашей команды:
//Command.php
class Command
{
}
и индексный скрипт вашей команды:
//command_index.php
(new Command($argv))->run();
Таким образом, вы можете проверить класс вашей команды в своем тестовом наборе и исключить command_index.php из покрытия.
Других решений пока нет …