4

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

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

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

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

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

4

1 回答 1

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文件的方法。这可能是一个半答案,但我相信这是一个很好的线索。

于 2013-03-11T18:38:18.523 回答