Symfony2在单元测试中获得配置参数

Cra*_*aig 10 unit-testing symfony

我有一个Symfony2服务,使用依赖注入使用config.yml中的参数构造.我现在正在尝试对其进行单元测试,并发现单元测试无法访问容器,因此无法访问服务.所以我应该使用模拟数据自己构建一个.如果我现在可以读取config参数(首先是config_test.yml然后是config.yml等等),这对我来说是有意义的,但似乎也不可能.这似乎使单元测试服务变得麻烦,因为我需要将初始化参数编码到测试而不是配置文件中.

如果在单元测试期间确实无法使用config.yml中的参数构建服务,那么有没有人知道它为什么是Bad Thing™的逻辑?

tim*_*c22 11

这对我有用:

class MyServiceTest extends WebTestCase
{
    public function testCookies()
    {
        $client = static::createClient();

        $myParams = $client->getKernel()->getContainer()->getParameter('my_params');
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 6

我找到了这篇文章,因为我自己在测试中需要配置参数.这是谷歌的第一次热播.

但是,这是一个有效的解决方案.可能会有更好的.

<?php

...

require_once(__DIR__ . "/../../../../../app/AppKernel.php");

class MediaImageTest extends WebTestCase
{
    private $_application;
    private $storagePath;

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

         $this->storagePath = $this->_application->getKernel()->getContainer()->getParameter('media_path');
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

你也可以看一下:通过单元测试访问Symfony 2容器? 在单元测试中访问内核是一个更清洁的解决方案.

  • $ container-> getParameter()就是答案 (3认同)