Unit testing Symfony2容器/内核的测试性能

Unit testing Symfony2容器/内核的测试性能,unit-testing,symfony,Unit Testing,Symfony,我的大多数测试用例都使用LiipfunctionalBundle,即使它们是单元。只是因为那里有“方便”的方法。最近我意识到我的测试性能非常差,即使是服务的单单元测试 如果我从容器中获得服务,则此问题主要会出现。LiipTestBundle中的哪个需要创建内核并引导它: protected function getContainer() { if (!empty($this->kernelDir)) { $tmpKernelDir = isset($_SERVER[

我的大多数测试用例都使用LiipfunctionalBundle,即使它们是单元。只是因为那里有“方便”的方法。最近我意识到我的测试性能非常差,即使是服务的单单元测试

如果我从容器中获得服务,则此问题主要会出现。LiipTestBundle中的哪个需要创建内核并引导它:

protected function getContainer()
{
    if (!empty($this->kernelDir)) {
        $tmpKernelDir = isset($_SERVER['KERNEL_DIR']) ? $_SERVER['KERNEL_DIR'] : null;
        $_SERVER['KERNEL_DIR'] = getcwd().$this->kernelDir;
    }

    $cacheKey = $this->kernelDir.'|'.$this->environment;
    if (empty($this->containers[$cacheKey])) {
        $options = array(
            'environment' => $this->environment
        );
        $kernel = $this->createKernel($options);
        $start = microtime(true);
        $kernel->boot();
        $time = microtime(true) - $start;
        print('boot:'.$time.PHP_EOL);

        $this->containers[$cacheKey] = $kernel->getContainer();
    }

    if (isset($tmpKernelDir)) {
        $_SERVER['KERNEL_DIR'] = $tmpKernelDir;
    }

    return $this->containers[$cacheKey];
}
在我的一些案例中,在“测试”环境中启动需要6-10秒。有时只有2秒。但是它仍然很慢,我想知道为什么它这么慢,我能做些什么。我已经开始在自己的测试用例中创建服务,而不是使用容器。但这也意味着要为创建测试用例付出更多的努力。

好吧,“便利性”正在扼杀你。您只能将LiipfunctionalBundle与功能测试一起使用。按照您当前的路径,您很快也会发现您的测试很难维护

如果您想要快速测试,请编写更多的单元测试。正确使用依赖注入。不要将容器注入到类中(我只是猜测为什么选择在测试中使用内核或容器)

在开发和测试环境中,监控资源,以便在配置文件更改时刷新缓存。这很可能是它比prod环境慢的原因