2016-08-22 11 views
7

से अपग्रेड करना हमने अपने सिस्टम को PHP7.0 में अपग्रेड किया। इसने हमें PHPUnit को 5.5 तक अपग्रेड करने की आवश्यकता है, क्योंकि 4.8 PHP7 का उचित समर्थन नहीं करता है। यह निम्न त्रुटि है, जो हमारे सीआई में PHPUnit में एक विफलता जाल का उत्पादनPHPUnit को 4.8 से 5.5

PHPUnit_Framework_TestCase::getMock() is deprecated, 
use PHPUnit_Framework_TestCase::createMock() or 
PHPUnit_Framework_TestCase::getMockBuilder() instead 

क्या यह अब की तरह लग रहा है कि हम 1200 + इकाई परीक्षण को छूने के लिए refactor करने के लिए कैसे हम अपने mocks का निर्माण होता है।

क्या कोई चेतावनी दबाने का कोई तरीका है, या getMock से createMock तक हमारे उपयोगों को त्वरित रूप से परिवर्तित करने के लिए, जो अलग-अलग काम करता है कि वैश्विक खोज/प्रतिस्थापन इसे काट नहीं देगा?

+0

वहाँ पैटर्न एडाप्टर कहा जाता है। इस पर एक नज़र मारो। – jaro1989

+0

बहिष्करण छिपाने के लिए त्रुटि रिपोर्टिंग सेट करें? 'error_reporting (E_ALL और ~ E_DEPRECATED); 'http://php.net/function.error- रिपोर्टिंग –

+0

@GerardRoche मुझे लगता है कि, बहिष्करण को छिपाना बुरा विचार है। हम अपनी परियोजना को अद्यतित करने के लिए काम कर रहे हैं जैसा हम कर सकते हैं। यह सिर्फ समस्या से परहेज है। – jaro1989

उत्तर

5

आप अतिरिक्त परीक्षण वर्ग TestAdapter कहा जाता है जो PHPUnit_Framework_TestCase

class TestAdapter extends PHPUnit_Framework_TestCase 
{ 
    /** 
    * Override your deprecated method 
    */ 
    public function getMock() 
    { 
     return $this->createMock(); 
    } 
} 

का विस्तार होगा बना सकते हैं तो फिर तुम सिर्फ इस वर्ग से अपने परीक्षण के सभी का विस्तार करने की जरूरत है।

+0

हम सचमुच 'टेस्टकेज़ :: getMock()' को हमारे 'टेस्ट एडाप्टर' वर्ग में किसी भी दोष के साथ प्रतिलिपि बना सकते हैं, क्योंकि स्पष्ट रूप से 'getMock() 'उपयोगों में से कोई भी चीज़ को बहिष्कृत नहीं किया गया है। हालांकि, स्वीकार्य रूप से ऐसा लगता है कि जो कुछ भी उनके इरादे को कम करने के लिए थे। – Umbrella

+0

यूप। इसके अलावा इस अतिरिक्त परत से कुछ लाभ भी हैं।आप अपना डुप्लिकेट कोड उसमें ले जा सकते हैं और फिर आपको इसकी आवश्यकता के अनुसार अलग कर सकते हैं। यह वही ऑब्जेक्ट का मज़ाक उड़ा रहा है और डमी डेटा-एरे आदि का निर्माण करने के बारे में है। इसके बाद आप इसे यूनिटटेस्टहेल्पर नाम दे सकते हैं और आपको कभी भी – jaro1989

+0

के बारे में खेद नहीं होगा जैसा कि ऐसा होता है, हमारे पास पहले से ही ऐसी कक्षा थी, यह उस समय मेरे साथ नहीं हुई थी यह मध्यवर्ती वर्ग था जहां हम अपने 'getMock()' कॉल कर रहे थे, यही कारण है कि हमारे सभी परीक्षण (जो पहले से ही मॉकबिल्डर का उपयोग करते हैं) इस चेतावनी को प्राप्त कर रहे थे। यह इस समाधान को न केवल सरल बनाता है, बल्कि (हमारे लिए) होना चाहिए। – Umbrella

0
मेरे पुराने परीक्षण के लिए

निम्नलिखित काम करता है ...

/** 
* Returns a mock object for the specified class. 
* 
* This method is a temporary solution to provide backward compatibility for tests that are still using the old 
* (4.8) getMock() method. 
* We should update the code and remove this method but for now this is good enough. 
* 
* 
* @param string  $originalClassName  Name of the class to mock. 
* @param array|null $methods     When provided, only methods whose names are in the array 
*           are replaced with a configurable test double. The behavior 
*           of the other methods is not changed. 
*           Providing null means that no methods will be replaced. 
* @param array  $arguments    Parameters to pass to the original class' constructor. 
* @param string  $mockClassName   Class name for the generated test double class. 
* @param bool  $callOriginalConstructor Can be used to disable the call to the original class' constructor. 
* @param bool  $callOriginalClone  Can be used to disable the call to the original class' clone constructor. 
* @param bool  $callAutoload   Can be used to disable __autoload() during the generation of the test double class. 
* @param bool  $cloneArguments 
* @param bool  $callOriginalMethods 
* @param object  $proxyTarget 
* 
* @return \PHPUnit_Framework_MockObject_MockObject 
* 
* @throws \Exception 
*/ 
public function getMock($originalClassName, $methods = array(), array $arguments = array(), $mockClassName = '', $callOriginalConstructor = true, $callOriginalClone = true, $callAutoload = true, $cloneArguments = false, $callOriginalMethods = false, $proxyTarget = null) 
{ 
    $builder = $this->getMockBuilder($originalClassName); 

    if (is_array($methods)) { 
     $builder->setMethods($methods); 
    } 

    if (is_array($arguments)) { 
     $builder->setConstructorArgs($arguments); 
    } 

    $callOriginalConstructor ? $builder->enableOriginalConstructor() : $builder->disableOriginalConstructor(); 
    $callOriginalClone ? $builder->enableOriginalClone() : $builder->disableOriginalClone(); 
    $callAutoload ? $builder->enableAutoload() : $builder->disableAutoload(); 
    $cloneArguments ? $builder->enableOriginalClone() : $builder->disableOriginalClone(); 
    $callOriginalMethods ? $builder->enableProxyingToOriginalMethods() : $builder->disableProxyingToOriginalMethods(); 

    if ($mockClassName) { 
     $builder->setMockClassName($mockClassName); 
    } 

    if ($proxyTarget) { 
     $builder->setProxyTarget($proxyTarget); 
    } 

    $mockObject = $builder->getMock(); 

    return $mockObject; 
}