2012-02-05 28 views
0

我的應用程序中有一個API模塊,它是一個RESTful API--基本上是一組公共Web服務。我想用PHPUnit單元測試我的Web服務。現在的問題...Zend Framework API - 如何使應用程序在單元測試時使用不同的數據庫?

通常我的應用程序使用「dbname」數據庫。但是,當使用PHPUnit進行單元測試時,我希望它使用「dbname_test」數據庫(當然包含相同的一組表)。

達到此目的的最佳方法是什麼?在我的PHPUnit測試用例中,我使用Zend_Http_Client向我的API模塊發送請求,然後聲明返回的響應。

謝謝。

回答

1

我會把測試部在我的application.ini:

[production] 
... 
; Database. 
resources.db.adapter = "PDO_MYSQL" 
resources.db.params.host = "localhost" 
resources.db.params.username = "user" 
resources.db.params.password = "pass" 
resources.db.params.dbname = "primary" 

[testing : production] 
resources.db.params.username = "test" 
resources.db.params.password = "test" 
resources.db.params.dbname = "testing" 

坐落在我的.htaccess環境變量:

SetEnv APPLICATION_ENV testing 

並確保我加載正確的設置:

defined('APPLICATION_ENV') 
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); 
$application = new Zend_Application(
    APPLICATION_ENV, 
    array('config' => array(
     APPLICATION_PATH . '/configs/application.ini', 
     APPLICATION_PATH . '/configs/additional.ini', 
    )) 
); 

另一個想法

Conditionally set基於遠程IP和用戶代理的.htaccess中的APPLICATION_ENV變量。如果兩者不匹配,則使用生產。

SetEnv APPLICATION_ENV production 

SetEnvIf  Remote_Addr 55\.55\.55\.555 APPLICATION_ENV=testing 
SetEnvIfNoCase User-Agent !PHPUNIT  APPLICATION_ENV=production 
+0

但我希望我的應用程序環境保持不變。一旦部署了應用程序,我將希望在生產服務器上運行單元測試,並且我希望應用程序在我進行單元測試期間能夠正常運行。 – 2012-02-05 15:54:21

+0

哦,我明白了。然後我將有條件地加載基於IP地址的測試環境。那會滿足你的要求嗎? – nachito 2012-02-05 15:58:39

+1

首先部署然後運行unittests是不是很奇怪? – markus 2012-02-05 16:11:22

相關問題