我需要针对两个不同的数据库配置运行Symfony2应用程序的单元测试,一个使用MySQL数据库,另一个使用SQLite数据库。
我目前通过编辑app/config/config_test.yml
选择在运行单元测试时使用的数据库配置。我要么取消注释与MySQL相关的数据库设置,要么注释掉与SQLite相关的数据库设置,反之亦然。
我不想这样做,而是有两个配置文件 - 可能是app/config/config-test-mysql.yml
和app/config/config-test-sqlite.yml
- 并在运行测试时从命令行中选择测试环境。 / p>
查看了app/phpunit.xml.dist
中的默认Symfony2 phpunit配置并查看了配置使用的引导文件(app/bootstrap.php.cache
),我无法确定环境在运行时如何默认为test
单元测试。
如何选择运行单元测试时要使用的环境?
答案 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
方法。这可能是一个半答案,但我相信这是一个很好的领导。