A command with 80 lines in execute(), none of which could be called from anywhere else, including a test.
protected function execute(InputInterface $in, OutputInterface $out): int
{
$result = $this->reconciler->run(
since: new DateTimeImmutable($in->getOption('since')),
dryRun: $in->getOption('dry-run'),
);
$out->writeln(sprintf('%d matched, %d unmatched',
$result->matched, $result->unmatched));
return $result->unmatched === 0 ? Command::SUCCESS : Command::FAILURE;
}
The command should parse input, call one thing, and format output. Everything else belongs in a service that a controller or a queue worker could also call, and the test for the logic then does not need a console tester at all. The exit code is the part worth deciding deliberately: returning failure when there is unmatched data makes the command usable from a cron job that alerts on non-zero, and returning success always makes it decorative.