2012-03-16 13 views
8

मैंने डॉक्टर 2 मोंगो ओडीएम यूनिट परीक्षण लिखना शुरू किया लेकिन मुझे एहसास हुआ कि मेरे पास ऐसा करने के लिए मेरे कोड में एक अच्छी रणनीति नहीं है। मैं परीक्षण चलाने और वास्तव में वस्तुओं को जारी रखना चाहता हूं लेकिन फिर मैं अपने परीक्षण डेटा को आंसू में आसानी से हटाने की अनुमति देना चाहता हूं। संग्रह और डीबी नामों को एनोटेशन में मैंने जो देखा है उससे निर्दिष्ट किया जाना चाहिए और इसे ओवरराइड नहीं किया जा सकता है, इसलिए मैं केवल टेस्ट डीबी नहीं बना सकता और इसे बाद में मिटा सकता हूं।यूनिट परीक्षण सिद्धांत ओडीएम

क्या किसी के पास सर्वोत्तम अभ्यास या उदाहरण हैं जो वे परीक्षण करने के सर्वोत्तम तरीकों के बारे में सोचते हैं?

+0

किसी भी मैं कैसे मॉडल है कि सिद्धांत ODM द्वारा कायम कर रहे हैं परीक्षण किया जाना चाहिए के लिए सबसे अच्छा अभ्यास करने के लिए संकेत की सराहना की जाएगी। मॉडल के बाद वहां बहुत कुछ नहीं लगता है। –

उत्तर

10

आपको अपनी वस्तुओं को जारी रखने की आवश्यकता नहीं है। अच्छा तरीका यह है कि आपकी ऑब्जेक्ट जारी रहे या नहीं, यह जांचने के लिए मॉक का उपयोग करें। मैं आपको कुछ उदाहरण दूंगा।

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(); 
    } 
} 

अब, आप अगर एक दस्तावेज़ वास्तव में कायम किया गया था क्योंकि यह कहीं परीक्षण किया जाता है आईडी सिद्धांत कोड की जांच नहीं करेगा: कहते हैं कि तुम एक वर्ग करते हैं। आप मान सकते हैं कि 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); 
} 
+1

क्वेरीबिल्डर में जोड़ना शुरू करने के बाद यह अधिक जटिल हो जाता है। सुझाव? –