Symfony2:如何在运行单元测试时选择要使用的环境?

时间:2013-03-11 16:54:45

标签: unit-testing symfony phpunit

我需要针对两个不同的数据库配置运行Symfony2应用程序的单元测试,一个使用MySQL数据库,另一个使用SQLite数据库。

我目前通过编辑app/config/config_test.yml选择在运行单元测试时使用的数据库配置。我要么取消注释与MySQL相关的数据库设置,要么注释掉与SQLite相关的数据库设置,反之亦然。

我不想这样做,而是有两个配置文件 - 可能是app/config/config-test-mysql.ymlapp/config/config-test-sqlite.yml - 并在运行测试时从命令行中选择测试环境。 / p>

查看了app/phpunit.xml.dist中的默认Symfony2 phpunit配置并查看了配置使用的引导文件(app/bootstrap.php.cache),我无法确定环境在运行时如何默认为test单元测试。

如何选择运行单元测试时要使用的环境?

1 个答案:

答案 0 :(得分:1)

我没有尝试过这个解决方案,但我确信这是一个很好的领导。

我的单元测试类扩展了Symfony\Bundle\FrameworkBundle\Test\WebTestCase,这使您可以创建Client,它本身会创建Kernel

在您的单元测试中,您可以这样做:

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class DatabaseRelatedTest extends WebTestCase
{
    private static $client;

    public function setUp()
    {
        // this is the part that should make things work
        $options = array(
            'environment' => 'test_mysql'
        );
        self::$client = static::createClient($options);
        self::$client->request('GET', '/foo/bar'); // must be a valid url
    }
}

您将能够使用客户端的容器访问EntityManager和扩展Connection

self::$client->getContainer()->get('doctrine')

理想情况是使用setUp文件将环境名称传递给phpunit.xml.dist方法。这可能是一个半答案,但我相信这是一个很好的领导。