php - 使用 phpunit 测试命令 symfony

标签 php symfony phpunit symfony-3.2

我用 symfony3.2 创建了一些基本命令来定期生成一些时事通讯 当我想用 phpunit 5.5.4 测试我的 symfony 命令时,我正在处理一些问题。 它从一开始就失败了:

    /**
     * @param InputInterface $input
     * @param OutputInterface $output
     */
    protected function execute(InputInterface $input, OutputInterface $output){

        $output->writeln("<info>Script start</info>");
        //...
        $output->writeln("<info>done</info>");
     }

通过这个单元测试:

use MyBundle\Command\MyCommand;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Symfony\Component\Console\Tester\CommandTester;

class MyCommandTest extends KernelTestCase
{

    public function testExecute(){

        $kernel = static::createKernel();
        $kernel->boot();

        $application = new Application($kernel);
        $application->add(new MyCommand());

        $command = $application->find('generate:newsletter');
        $commandTester = new CommandTester($command);
        $commandTester->execute(array(
            'command' => $command->getName()
        ));

        $output = $commandTester->getDisplay();
        $this->assertContains('done',$output);
    }
}

我关注 this一步一步但在我的情况下我得到:

Error: Call to a member function writeln() on string

MyBundle/Command/MyCommand.php:197
vendor/symfony/symfony/src/Symfony/Component/Console/Command/Command.php:262
vendor/symfony/symfony/src/Symfony/Component/Console/Tester/CommandTester.php:84
MyBundle/Command/MyCommandTest.php:34

似乎 commandTester 没有在 MyCommand 的执行方法中放入正确的参数。 我想知道这是否不是 CommandTesterClass 问题。

这就是我来这里的原因,与您分享并共同寻找解决方案。

提前致谢

最佳答案

方法 'getDisplay()' 返回一个字符串,您可以从 Api 文档中看到: http://api.symfony.com/3.0/Symfony/Component/Console/Tester/CommandTester.html并且您将该字符串分配给 $output 变量。 我想你需要的是 'getOutput()'

关于php - 使用 phpunit 测试命令 symfony,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47183273/

相关文章:

javascript - 在此特定示例中如何将 Javascript 变量传递给 Twig

PHPUnit 的 returnValueMap 没有产生预期的结果

php - 在 PHP 中对 HTML 进行可靠的单元测试

linux - 使用控制台的 Symfony 缓存权限

php - 我怎样才能得到当年SQL中每个月的计数?

php - 迁移 blob 字段 mysqli

php - 基本 href 不适用于 IE - 替代方案?

mysql - 如何个性化ACL表名?

php - 获取将使用 PHPUNIT 配置文件执行的测试列表

PHPStorm、Xdebug 和 Google Chrome 调试