public function testPreAndPostCommandHandlersAreRun()
 {
     $preLogger = new Logger('sdfs', array(new TestHandler()));
     $this->dispatcher->addPreCommandHandler(function ($command) use($preLogger) {
         $preLogger->info('pre');
     });
     $postLogger = new Logger('fghhgf', array(new TestHandler()));
     $this->dispatcher->addPostCommandHandler(function ($command) use($postLogger) {
         $postLogger->info('post');
     });
     $command = $this->createCommand();
     $this->dispatcher->handleCommands(array($command));
     $records = $preLogger->popHandler()->getRecords();
     $this->assertEquals('pre', $records[0]['message']);
     $records = $postLogger->popHandler()->getRecords();
     $this->assertEquals('post', $records[0]['message']);
 }
            }
        }
    }
    private function getRandomKenoNumber()
    {
        return rand(1, 70);
    }
    public function preLog(LoggerInterface $logger)
    {
        $logger->info(sprintf('Will generate %s keno numbers...', $this->numberAmount));
    }
    public function postLog(LoggerInterface $logger)
    {
        sort($this->kenoNumbers);
        $logger->info(sprintf('...generated %s numbers: %s.', ucwords(self::NAME), implode(', ', $this->kenoNumbers)));
    }
}
$logger = new Logger('test', array(new TestHandler()));
$dispatcher = new Dispatcher();
$dispatcher->addPreCommandHandler(function (CommandInterface $command) use($logger) {
    $command->preLog($logger);
});
$dispatcher->addPostCommandHandler(function (CommandInterface $command) use($logger) {
    $command->postLog($logger);
});
$commands = array(GenerateLotteryNumbersCommand::create(array(7)), GenerateKenoNumbersCommand::create(array(10)));
$dispatcher->handleCommands($commands);
$records = $logger->popHandler()->getRecords();
foreach ($records as $record) {
    print_r($record['message'] . "\n");
}