स्थापना
के बाद से Magento 1 बॉक्स से बाहर संगीतकार का उपयोग नहीं करता, मुझे नहीं लगता कि अगर आप संगीतकार का उपयोग कर PHPUnit स्थापित करने या सिर्फ डाउनलोड यह एक बड़ा फर्क नहीं पड़ता है phar संस्करण।
यदि आप पहले से ही अपनी साइट में अन्य तीसरे पक्ष के मॉड्यूल या पुस्तकालयों का प्रबंधन करने के लिए संगीतकार का उपयोग करते हैं, तो संगीतकार शायद सबसे अधिक समझ में आता है। जब तक आप PHP7 का उपयोग नहीं करते तब तक आप फ़पुनिट के एक पुराने संस्करण तक सीमित रहेंगे (हालांकि यही कारण है कि मैं ऊपर 4.8 संस्करण से जुड़ा हुआ हूं)।
एकीकरण टेस्ट बनाम / और / या यूनिट टेस्ट
चूंकि Magento 1 इतना भारी वजन अनुप्रयोग है, इसलिए यह फ़्यूपुनिट बूटस्ट्रैप को एकीकरण के लिए एक और इकाई परीक्षणों में से एक में अलग करने के लिए समझ में आता है।
यूनिट टेस्ट बूटस्ट्रैप को केवल ऑटोलैडर को इनिशियलाइज़ करने की आवश्यकता होती है, जबकि इंटीग्रेशन टेस्ट बूटस्ट्रैप को कॉन्फ़िगरेशन लोडिंग और डीबी कनेक्शन सहित पूरे एप्लिकेशन वातावरण को इनिशियलाइज़ करने की आवश्यकता होती है।
क्योंकि Magento में एकीकरण परीक्षण बहुत धीमी गति से चलाने के लिए इकाई परीक्षण (और भी अधिक तब अन्य अनुप्रयोगों में) करते हैं।
बूटस्ट्रैपिंग मैगेंटो को फ़पुनिट में
Magento के ऑटोलॉडेर PSR-0 के अनुरूप नहीं है क्योंकि यह एक अपवाद को फेंकता है यदि वह उस फ़ाइल को नहीं ढूंढ सकता है जो एक कक्षा में स्थित है। यह class_exists
phpunit के कुछ उपयोगों को तोड़ता है। कई संभव (अगर हैडी) वर्कअराउंड हैं:
- Magento के ऑटोलैडर को अपंजीकृत करें,
\Varien_Autoload::autoload()
एक डेकोरेटर में लपेटकर अपवादों को नजरअंदाज कर दिया जाए और रैपर को नए ऑटोलैडर के रूप में पंजीकृत किया जाए। यह तीसरे पक्ष के पुस्तकालयों के साथ संघर्ष की कम संभावना है जो ऑटोलॉजिस्ट को पंजीकृत करते हैं और एक विशिष्ट ऑटोलैडर आदेश पर निर्भर करते हैं।
- Magento में निर्मित एक को लपेटने वाले कस्टम त्रुटि हैंडलर का उपयोग करें। 1. कस्टम त्रुटि हैंडलर Magento के ऑटोलैडर द्वारा ट्रिगर की गई त्रुटियों को निगल लेता है। यह वह समाधान है जो राफेल के परीक्षण ढांचे का उपयोग करता है । यह अन्य तृतीय पक्ष एक्सटेंशन के साथ सबसे अधिक संगत लगता है।
\Varien_Autoload::autoload()
यदि फ़ाइल मौजूद नहीं है, तो त्रुटि को न फेंकने के लिए शामिल करने के लिए पथ हैक शामिल करें का उपयोग करें । यह हालांकि कई मॉड्यूल के साथ संघर्ष करता है जो एक ही वर्ग को भी ओवरराइड करता है। मैं स्वयं इस दृष्टिकोण का उपयोग नहीं करता हूं।
केवल $_SESSON = []
बूटस्ट्रैप में सेट किए गए परीक्षणों के दौरान शुरू होने वाले सत्र से त्रुटियों से बचने के लिए ।
इसके माध्यम से एक कस्टम रिस्पांस ऑब्जेक्ट सेट करें Mage::app()->setResponse($testResponse)
जो वास्तविक को बढ़ाता है लेकिन आउटपुट या हेडर नहीं भेजता है।
एकीकरण परीक्षणों के बीच मैगेंटो को फिर से संगठित करने के लिए जो रनटाइम स्थिति को पूरी तरह से बदल देते हैं, उपयोग करें Mage::reset(); Mage::app()
। ध्यान दें कि उसके बाद त्रुटि हैंडलर को फिर से सजाना होगा।
फिक्स्चर
डीबी जुड़नार के लिए मैं जुड़नार बनाने के लिए नियमित मॉडल का उपयोग करने के लिए जुड़नार का उपयोग करता हूं, जैसे createSimpleProduct($sku)
। जैसा कि राफेल ने कहा, परीक्षण में परीक्षण का उपयोग करें setUp()
और tearDown()
उसे लपेटें जो परीक्षण के बाद वापस मिल जाता है (उदाहरण के लिए Mage::getSingleton('core/resource')->getConnection('default_setup')->beginTransaction()
)।
स्टोर कॉन्फ़िगरेशन जुड़नार के लिए, मैं केवल मेमोरी का उपयोग करके इन-मेमोरी सेट अप करने के लिए हूं Mage::app()->getStore()->setConfig($path, $value)
।
EcomDev_PHPUnit
विस्तार भी YAML फ़ाइलों का उपयोग कर डीबी जुड़नार बनाने का विकल्प प्रदान करता है, लेकिन खुद के लिए मैं उन कठिन मॉडल वर्गों का उपयोग कर बनाई जुड़नार की तुलना में बनाए रखने के लिए लगता है। YMMV।
टेस्ट डबल्स
के माध्यम से बनाई गई वस्तुओं के लिए परीक्षण डबल्स को इंजेक्ट करने के लिए रजिस्ट्री का उपयोग किया जा सकता है Mage::getSingleton()
, Mage::getResourceSingleton()
और Mage::helper()
।
कुछ अन्य केंद्रीय वस्तुओं को Mage::app()
(जैसे अनुरोध) पर सेट किया जा सकता है ।
के माध्यम से Mage::getModel()
या Mage::getResourceModel()
परीक्षण डबल्स के साथ बनाई गई कक्षाओं को बदलने के लिए , एक कस्टम कॉन्फ़िगरेशन ऑब्जेक्ट रैपर का उपयोग करना होगा। राफेल के परीक्षण ढांचे में इस उदाहरण को देखें कि इसे कैसे पूरा किया जा सकता है।
सारांश
एक बार जब Magento को बूटस्ट्रैप किया जाता है, तो बहुत अधिक सब कुछ अच्छी तरह से परीक्षण किया जा सकता है। हालांकि मूल कोड का उपयोग करने की विधि की बड़ी मात्रा के कारण गहरे मोज़ेक बनाने के लिए तैयार रहें।
भले ही सेटअप हैक हो, यह अच्छी तरह से काम करता है और मुझे लगता है कि परीक्षण मुझे बहुत आत्मविश्वास और मूल्य देते हैं, एक सिम्फनी ऐप के लिए एक परीक्षण सूट के लिए काफी तुलनीय है।