2012-08-06 68 views
1

我想設置我的PHPUnit測試與教條2 ORM。然而,我得到的奇怪問題我只能假設爲某種緩存(在Doctrine的結尾),我無法弄清楚如何克服。這是我的本錢:奇怪的學說2行爲與PHPUnit

的設置功能:

public function setUp() 
{ 
    $front = Zend_Controller_Front::getInstance(); 
    $bootstrap = $front->getParam("bootstrap"); 

    if(!$boostrap) { 
     $application = Zend_Registry::get("application"); 
     $bootstrap = $application->getBootstrap(); 
    } 
    $bootstrap->bootstrap('doctrine'); 

    $this->em = $bootstrap->getResource('doctrine'); 
    $tool  = new \Doctrine\ORM\Tools\SchemaTool($this->em); 
    $classes = $this->em->getMetaDataFactory()->getAllMetaData(); 

    $tool->dropSchema($classes); 
    $tool->createSchema($classes); 

    parent::setUp(); 
} 

這基本上旨在學說實例重置每個測試。我沒有使用tearDown()函數,因爲目前這需要重新設置架構,如圖所示。我應該在這裏提到我正在使用SQLite。

我有兩個測試在一個類,我試圖運行,沒有依賴關係。第一項測試插入如下記錄:

$value = 5; 
$model = new Model(); 
$model->setUserId($rater->getId()); 
$model->setValue($value); 

$this->em->persist($model); 
$this->em->flush(); 

到目前爲止,這麼好。我在數據庫中創建了一個新記錄,其值爲5.

對下一個測試。這次我想運行:

$value = 3; 
$model = new Model(); 
$model->setUserId($rater->getId()); 
$model->setValue($value); 

$this->em->persist($model); 
$this->em->flush(); 

將相關表中的所有記錄轉儲給我一個結果;再次記錄值爲5的記錄。換句話說,第二個測試是從第一個測試中獲得$值。 我已經通過在第二次測試開始時轉儲所有記錄進行了雙重檢查,並且這不會返回任何內容。看來在Doctrine中有一些我不知道的緩存問題。

我試着清除,我所知道主義有可能確保各種高速緩存,如:

$cacheDriver = new \Doctrine\Common\Cache\XcacheCache(); 
$cacheDriver->deleteAll(); 

任何人都可以提出什麼我能試試嗎?或者在我實現了Doctrine的方式中,有一些錯誤的代碼。

感謝

+0

它不應該與緩存相關,你可以請你發佈你的單元測試的內容嗎? – WizardZ 2012-08-07 07:04:54

回答

1

所以我不能完全肯定或什麼的問題是在哪裏,但似乎主義必須已緩存的地方下了線。畢竟,我確保了我的對象具有正確的值,但是在預沖洗後仍然存在。後沖洗它突然有一個不同於預期的價值。

總之,要解決這個問題,我添加以下行:

$this->em->clear(); 

只是從我的引導得到學說資源之後。這確保在刪除和重新創建模式之前,所有被管實體都從Entity Manager中完全清除。