CodeSampleX

Пример

symfony/console 8.1.4: Test a symfony/console command with CommandTester, with no process and no terminal

Проверенный пример — composer symfony/console 8.1.4: Test a symfony/console command with CommandTester, with no process and no terminal. Контракт выполнен на…

sha256:a49ac462fc85823519ce8151c25439ec2ac9e9556684d5a165edf4ae9fd8e48e

Эта сеть предлагает одно: образец, который собирается. Она запустила его в песочнице и сохранила подписанную квитанцию. Она ничего не оценивает и ничего не гарантирует — собирается ли тот же код у вас, она не измеряла. Сколько различных ключей подписи подали пройденную квитанцию контракта. Один — только автор; больше одного — значит, кто-то ещё тоже собрал. Ключ создаётся сам и не имеет зарегистрированной личности, поэтому считаются ключи, а не люди. MIT-0

Свидетельства выполнения

Заявленное окружение и подписанные запуски разделены, чтобы вы точно видели, что этот образец запускал и где.

Основа свидетельства
Подписанный контракт пройден
Квитанции проверки
2
Ключи подписи, собравшие его
2
Заявленная среда php 8 linux x64 php 8 php composer

Среды запусков проверки

Окружение Контракт Этапы Запуск
php 8 · linux alpine/x64 · docker ed25519:a2ec939a4c60e243 PASS compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS
CONTAINER_RUN · composer@1
2026-08-14
php 8 · linux alpine/x64 · docker ed25519:2175b912ea1c23b1 PASS compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS
CONTAINER_RUN · composer@1
2026-08-18

Кейс

HOW
Цель
Test a symfony/console command with CommandTester, with no process and no terminal
Пакеты
Символы
  • Symfony.Component.Console.Tester.CommandTester
  • CommandTester::execute
  • CommandTester::setInputs
  • CommandTester::run
  • Symfony.Component.Console.Tester.ApplicationTester
  • Command::configure
  • Command::execute
  • InputArgument::REQUIRED
  • InputOption::VALUE_REQUIRED
  • OutputInterface::VERBOSITY_VERBOSE
  • Symfony.Component.Console.Question.Question
Окружение
php 8
Создан
2026-08-14T14:11:03Z

Контракт

  1. assert configure() declares the definition the tester array is bound against: bare keys are arguments and prefixed keys are options, an omitted optional argument falls back to the default declared there, and the command is named by the #[AsCommand] attribute now that Command::getDefaultName is gone
  2. assert values arrive with the type the array held because there is no argv to stringify them, so an int option stays an int and only a defaulted value carries the type configure() declared
  3. assert a missing required argument is a console RuntimeException raised by validate() inside Command::run before execute() is entered, that the tester therefore has no status code to read, and that interact() runs earlier in that order than the validation, so a command filling the argument in interact() survives the same empty array
  4. assert the command name does not belong in the array for a standalone command, that a key without dashes is looked up as an argument name whatever it was meant to be, and that an undeclared option is an InvalidOptionException
  5. assert an Application is what declares the command argument, that CommandTester supplies the command name once the command is attached to one, and that Application::add was removed in favour of addCommand
  6. assert getStatusCode is whatever execute() returned, with Command::SUCCESS 0, Command::FAILURE 1 and Command::INVALID 2
  7. assert getDisplay returns the rendered output and that the decorated flag is what turns an <info> tag into the green ANSI pair
  8. assert setInputs answers an interactive question, and that omitting it is EOF rather than a hang: a Question with a default answers itself and flips the input to non-interactive, while a Question without one raises MissingInputException
  9. assert --no-interaction is inert under CommandTester because only Application::configureIO interprets it, so the execute() interactive option or an ApplicationTester run is what actually turns the question off
  10. assert a writeln at VERBOSITY_VERBOSE prints nothing at default verbosity and that -v in the tester array does not change that, while the verbosity execute() option and an ApplicationTester run both do
  11. assert CommandTester::run returns an ExecutionResult that carries the status code and keeps output and error output apart, and that the input it kept is ArrayInput's rendering of the array rather than a command line, because the VALUE_NONE option renders with a value that argv rejects, while the legacy execute() path merges the two streams into one display and refuses getErrorOutput without capture_stderr_separately

Файлы

  • composer.json
  • composer.lock
  • csx.json
  • phpunit.xml
  • src/AskNameCommand.php
  • src/ConsoleApp.php
  • src/GreetCommand.php
  • test/CommandTesterTest.php

Скачать артефакт с исходным кодом (tar.gz)

Исходный сидер

anonymous