我開始編寫Doctrine 2 Mongo ODM單元測試,但意識到我沒有一個好的策略來執行此操作。我想運行測試,並實際上堅持的對象,但我希望允許我的測試數據很容易在tearDown中刪除。集合和數據庫名稱必須從我在註釋中看到的內容中指定,並且不能被重寫,所以我不能只創建一個測試數據庫並在稍後將其擦除。單元測試原理ODM
有沒有人有最佳做法或他們認爲最好的測試方法的例子?
我開始編寫Doctrine 2 Mongo ODM單元測試,但意識到我沒有一個好的策略來執行此操作。我想運行測試,並實際上堅持的對象,但我希望允許我的測試數據很容易在tearDown中刪除。集合和數據庫名稱必須從我在註釋中看到的內容中指定,並且不能被重寫,所以我不能只創建一個測試數據庫並在稍後將其擦除。單元測試原理ODM
有沒有人有最佳做法或他們認爲最好的測試方法的例子?
你不必堅持你的對象。好的方法是使用模擬來檢查你的對象是否被持久化。我會舉一些例子。假設你有一個類:
class SomeSerivce
{
private $dm;
public function __construct(DocumentManager $dm)
{
$this->dm = $dm;
}
public function doSomeMagic($someDocument, $someValue)
{
$someDocument->setSomeValue($someValue);
$this->dm->persist($someDocument);
$this->dm->flush();
}
}
現在,你不會檢查一個文件是否真的持久,因爲這是測試某處id原則代碼。您可以假設persist
和flush
方法正常工作。你想檢查的是如果你的代碼正確調用這些方法。
所以,你的測試可能是這樣的:
(...)
public function testDoSomeMagic()
{
$documment = new Document();
// preapre expected object
$expectedValue = 123;
$expectedDocument = new Document();
$expectedDocument->setValue($expectedValue);
// prepare mock
$dmMock = $this->getMockBuilder('DocumentManager')
->setMethods(array('persist', 'flush'))
->disableOriginalConstructor()
->getMock();
$dmMock->expects($this->once())
->method('persist');
->with($this->equalTo($expectedDocument));
$dmMock->expects($this->once())
->method('flush');
// new we start testing with the mock
$someService = new SomeService($dmMock);
$someService->doSomeMagic($document, $expectedValue);
}
一旦你開始在queryBuilders中添加它會變得複雜得多。建議? – 2013-04-02 21:34:59
任何指針的最佳做法我應該如何測試由學說ODM堅持的車型將不勝感激。之後似乎沒有太多可塑造的東西。 – 2012-03-17 07:18:30