2011-07-13 40 views
6

因此,當我在我的ZF/Doctrine應用程序上運行測試時,一些測試碰巧破壞了Doctrine Entity Manager,並且所有順序測試都由於EM被關閉而失敗。學說的實體管理器崩潰並停留下來

我在我的測試/ bootstrap.php中設置EM起來:

$application = new Zend_Application(
    APPLICATION_ENV, 
    APPLICATION_PATH . '/configs/application.ini' 
); 
$application->bootstrap(); 
(...) 
$bootstrap = $application->getBootstrap(); 
$em = $bootstrap->getResource('doctrinemanager'); 

然後我設置的測試設置()函數中($本 - > _服務正在測試該服務):

$em = App::getEntityManager(); 
$this->_em = clone $em; 
$this->_service->setEm($this->_em); 

然後,當我運行導致EM引發異常並關閉(這對我來說是正確的行爲)的測試時,它在所有測試中保持關閉,這些測試當然由於EM被關閉而失敗。正如你所猜測的那樣,這不僅僅是我期望的測試行爲。

我試圖在設置服務之前克​​隆EM,但它不起作用。

是否有一種簡單的方法重新打開EM也許使用一些Doctrine方法?

回答

6

不,我不知道。最簡單的方法是簡單地(重新)啓動應用程序以在每個測試的設置階段運行。所以,每個測試都會得到一個新的$application實例和一個新的新的$em。這是快速修復。

適當的解決方案可能是從您的Zend_Application解耦您的測試。允許您的測試使用簡單的實體管理器運行,可能使用模擬連接或連接到in-memory SQLite database。在測試設置階段只創建這個實體管理器,因此每個測試都會得到一個新的實體管理器。這與上面的快速修復類似,除了現在您只專門創建了一個用於測試的實體管理器,而不是爲每個測試引導整個應用程序。它更精簡,更簡單。