Я пытаюсь проверить мою команду Symfony2 Console с помощью phpunit.
Я слежу за кулинарной статьей Symfony2 на эту тему:
http://symfony.com/doc/current/components/console/helpers/questionhelper.html#testing-a-command-that-expects-input
Однако, если я не могу предоставить ввод (тест не пройден), тогда phpunit просто сидит и ничего не ждет, ожидая ввода. Вот пример:
// MyCommand.php
class MyCommand extends Command {
// ... configure()
protected function execute(InputInterface $input, OutputInterface $output) {
$qh = $this->getHelper('question');
$q1 = new ConfirmationQuestion('First question, yes or no?', false);
$qh->ask($input, $output, $q);
$q2 = new ConfirmationQuestion('Second question, yes or no?', false);
$qh->ask($input, $output, $q);
}
}
// MyCommandTest.php
class MyCommandTest extends \PHPUnit_Framework_TestCase {
// ... getInputstream()
public function testExecute() {
$app = new Application();
$app->add(new MyCommand());
$cmd = $app->find('askquestions');
$cmdTester = new CommandTester($cmd);
$helper = $cmd->getHelper('question');
$helper->setInputStream($this->getInputStream('y\\n')); // this should be yy\\n
$cmdTester->execute([
'command' => $cmd->getName(),
]);
}
}
Обратите внимание, что я намеренно сделал свой тест некорректным, он только дает ответ на вопрос 1. С тех пор, как я написал этот тест, я с тех пор добавил q2, но забыл изменить свои тесты. Будучи хорошим программистом, я запускаю phpunit, чтобы увидеть, есть ли проблемы, но phpunit зависает, ожидая ввода от q2!
Как мне сделать так, чтобы мой тест игнорировал любые дальнейшие запросы на ввод, не выполнялся, если он сталкивался с одним, и продолжал работать с другими тестами?
Задача ещё не решена.
Других решений пока нет …