CommandTester : tester une commande console Symfony
CommandTester exécute une commande console Symfony dans un test, sans terminal, pour vérifier son code de sortie, ce qu'elle affiche et ce qu'elle change.
protected function setUp(): void { self::bootKernel(); $this->commande = new CommandTester((new Application(self::$kernel))->find('app:registre:purger')); } public function testLeModeABlancNeSupprimeRien(): void { $this->enregistrer($this->reservation('Boromir', '2026-07-02', 'honoree')); $this->assertSame(Command::SUCCESS, $this->commande->execute(['--dry-run' => true])); $this->assertSame(['Boromir'], $this->restantes()); $this->assertStringContainsString('1 réservation serait purgée', $this->commande->getDisplay()); }
On retrouve la commande par son nom dans l'Application du FrameworkBundle, construite sur le noyau du test : elle reçoit ses vrais services. execute() prend arguments et options dans un tableau, ['--avant' => '2026-08-01'], et rend le code de sortie, que getStatusCode() redonne ensuite ; getDisplay() rend tout ce qui a été affiché, et setInputs() prépare les réponses aux questions. Le piège : ne tester que le message. Une commande qui annonce « 25 réservations purgées » peut en avoir laissé cinq en base. Seul un test qui relit la base, avec des données choisies pour franchir les cas limites, comme un dernier lot incomplet ou une date pile sur la limite, la démasque.
Les exercices partent de l'inventaire de Gorm, piloté par des tests CommandTester, puis font écrire les tests du grand ménage du registre, qui doivent passer sur la commande telle qu'elle est et faire échouer quatre mutants ; enfin, ils font protéger toute la fonctionnalité des soirées de contes, jusqu'à la commande de rappels.
3 exercices font travailler cette notion, en écrivant du code dans le navigateur.
Dans les parcours
- L'inventaire Symfony pour les devs PHP · chapitre 11 : Les ordres du patron
- Tester les ordres Symfony pour les devs PHP · chapitre 11 : Les ordres du patron
- 🐉 Boss : le grand service Symfony pour les devs PHP · chapitre 12 : Le grand service