2013-06-04 7 views
5

मैं PHPUnit के साथ php कोड का परीक्षण कर रहा हूँ और मैं एक समस्या है:विधि में कैसे नकली नई वस्तु - PHPUnit

मैं कक्षा का परीक्षण कर रहा हूँ:

class ClassName 
{ 
    public function MethodName() 
    { 
    // something 

    $objectName = new Object(); 
    $variableName = $objectName->execute(); 

    // something 
    } 
} 

मैं वस्तु की नकली बनाने चाहते हैं। मैं नहीं चाहता कि वास्तविक विधि निष्पादित करें()। मैं नहीं जानता कि यह phpunit के साथ कैसे करते हैं। मुझे निर्भरता इंजेक्शन पता है, लेकिन आईएमएचओ इस मामले को निर्भरता इंजेक्शन के साथ हल नहीं किया गया है।

उत्तर के लिए धन्यवाद। मैं अपनी अंग्रेजी के लिए माफी चाहता हूँ।

उत्तर

5

असल में, इस मामले को डिमेंसी इंजेक्शन के साथ हल किया जा सकता है। आइए कहें कि आप MethodName के अंदर ऑब्जेक्ट को तुरंत चालू नहीं कर रहे हैं, लेकिन इसे इंजेक्ट कर रहे हैं। चाहे नियंत्रक, सेटर, या विधि के माध्यम से सिद्धांत के लिए बहुत मायने रखता है।

class ClassName 
{ 
    public function MethodName(Object $objectName) 
    { 
     // something 

     $variableName = $objectName->execute(); 

     // something 
    } 
} 

क्योंकि आप अब विधि आप परीक्षण करना चाहते अंदर वस्तु instaniate न, आप इसे एक नकली पारित जब आप इसे परीक्षण करना चाहते हैं कर सकते हैं।

public function testMethodName(){ 
    $mock = $this->getMockBuilder('Object')->getMock(); 

    $className = new ClassName; 

    $result = $className->MethodName($mock); 

    $this->assertTrue($result); 
} 

मैं इस testmethod नहीं चला, लेकिन मैं इसे testability के लिए depency इंजेक्शन के बिंदु दिखाता है लगता है।

+0

थान! मुझे अपने कोड के बारे में सोचना चाहिए। – lukas888

+0

मैं खुद कोई विशेषज्ञ नहीं हूं। मुझे लगता है कि लेखन परीक्षण भी कोड को क्लीनर बनाता है, क्योंकि आप इसकी संरचना के बारे में बेहतर सोचते हैं। http://youtu.be/RlfLCWKxHJ0 और http://youtu.be/-FRm3VPhseI अच्छी सामान्य वार्ताएं हैं, और http://www.slideshare.net/fabpot/dependency-injection-with-php-53 एक निर्भरता के लिए Pimple और अन्य महान परियोजनाओं के निर्माता से इंजेक्शन तर्क ... – qrazi

+0

मुझे लगता है कि यह रणनीति हमेशा उपयुक्त नहीं है। जैसा कि परीक्षण के तहत किसी विधि में बनाई जाने वाली वस्तु को \ DateTime() जैसा कुछ है। या एक ईवेंट ऑब्जेक्ट जो किसी ईवेंट प्रेषक को पास हो जाता है। – Brian

संबंधित मुद्दे