2012-06-29 34 views
0

好的,這裏的情況。我使用Doctrine 2和PHPUnit。 我有一個產品列表,每個產品都有一個類別。我想測試findByCategory()方法,它顯然應該返回特定類別的產品列表。Doctrine 2 - 功能測試

非常簡單,但我不知道如何正確測試。在網絡上的一些地方,我看到這樣只是簡單的例子:

$this->assertEquals(4, count($foundProducts)); 

所以這只是測試返回結果的數量,而不是實際的數據。 我也試過這樣:

foreach($allFoundProducts as $i=>$foundProduct) { 
     $this->assertEquals($products[$i], $foundProduct); 
    } 

其中$產品是實體的名單,我之前的搜索依然存在。 但它需要花費很多時間才能完成,有時甚至崩潰(內存不足)。

請指教我使用這種方法進行數據庫測試。

非常感謝!

+0

你的意思是通過[簡單條件]查詢(http://doctrine-orm.readthedocs.org/en/2.0.x/reference/working-with-objects.html#by-simple-conditions)? – manix

+0

我的意思是用phpunit進行功能測試。如何更方便地測試存儲庫方法。這可能是快捷方式或自定義,無所謂。 –

+0

如您所示,比較從DB返回的值與預期的字符串數組是顯而易見的方法。我認爲你需要擴展你的問題來解釋爲什麼這不好。爲什麼「需要花費很多時間才能完成」?如果它有時會崩潰,錯誤消息是什麼?在phpUnit或Doctrine中崩潰了嗎? –

回答

0

我測試返回結果的數量(如在你的第一個例子),然後通過運行結果並測試其類型:

$this->assertEquals(4, count($foundProducts)); 

foreach($foundProducts as $product) { 
    $this->assertInstanceOf('MyProductEntity', $product); 
} 
0

試試這個:

$products = $em->getRepository('MyProject\Domain\Product')->findBy(array('category' => $category)); 

或本:

$products = $em->getRepository('MyProject\Domain\Product')->findByCategory($category); 
+0

這與我的問題有什麼關係? –