Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Phpunit 在所有测试之前运行命令_Phpunit_Symfony - Fatal编程技术网

Phpunit 在所有测试之前运行命令

Phpunit 在所有测试之前运行命令,phpunit,symfony,Phpunit,Symfony,我创建了一个Symfony命令,将应用程序重置为初始状态。要从cli运行该命令,我需要键入: php bin/console app:reset 我希望在所有单元测试之前运行该命令一次。每次考试前,我都能做到这一点,当然,在所有课程前,我也能做到这一点。因此,我使用了该代码: public function setUp() { $kernel = new \AppKernel('test', true); $kernel->boot(); $app = new \

我创建了一个Symfony命令,将应用程序重置为初始状态。要从cli运行该命令,我需要键入:

php bin/console app:reset
我希望在所有单元测试之前运行该命令一次。每次考试前,我都能做到这一点,当然,在所有课程前,我也能做到这一点。因此,我使用了该代码:

public function setUp()
{
    $kernel = new \AppKernel('test', true);
    $kernel->boot();
    $app = new \Symfony\Bundle\FrameworkBundle\Console\Application($kernel);
    $app->setAutoExit(false);

    $app->run(new ArrayInput([
        'command' => 'app:reset', ['-q']
    ]), new NullOutput());
}
如上所述,在每个测试之前以及使用
setUpBeforeClass()
我可以在每个类之前使用它,但是在所有测试之前使用一次就足够了,因为该命令需要一些时间来运行。

您可以实现并使用静态属性来确保您的命令只执行一次

PHPUnit 5.4的示例:


Symfony文档解释了如何做到这一点:


简而言之,您需要修改
phpunit.xml.dist
来调用您自己的引导程序,而不是默认引导程序(并委托给默认引导程序)。

好主意,去看看吧!经过一些实验,我发现您也可以使用常规成员变量。通过这种方式,您可以创建一个基类,多个“运行一次”子侦听器可以从中继承。类似地,每个侦听器都可以将自己注册为关机函数(从基类执行此操作),以提供
endTestSuite
功能。这是最简单的方法。根据您的解释,无需转到Symfony文档。谢谢这是一种魅力。