2013-03-11 30 views
4

我需要針對兩個不同的數據庫配置對Symfony2應用程序運行單元測試,一個使用MySQL數據庫,另一個使用SQLite數據庫。Symfony2:如何在運行單元測試時選擇使用的環境?

我當前選擇DB編輯器,通過編輯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如何運行單元測試時。

如何在運行單元測試時選擇使用環境?

+2

何時人們會停止與涉及數據庫的測試相關的**單元**測試? – 2013-03-11 19:12:14

回答

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') 

理想的做法是對環境的名稱通過使用phpunit.xml.dist文件setUp方法。這可能是一半的答案,但我認爲這是一個很好的領先。

+0

這看起來不錯。我會在接下來的幾天內給它一個。 – 2013-03-11 19:33:20

相關問題