पूर्वापेक्षाएँ: मैं Play! framework, और जावा संस्करण (स्कैला नहीं) का नवीनतम संस्करण उपयोग कर रहा हूं।बाहरी सेवाओं के साथ इंटरैक्शन परीक्षण
उपयोगकर्ता द्वारा बनाए जाने पर मुझे संदेश कतार में एक संदेश प्रकाशित करने की आवश्यकता है, और मैं उस व्यवहार का परीक्षण करना चाहता हूं। मेरा मुद्दा यह आसानी से टेस्ट करने योग्य बना रहा है।
नियंत्रक दृष्टिकोण
अन्य चौखटे में, क्या मैं नियंत्रक में निर्माता इंजेक्शन का उपयोग करें और मेरे परीक्षण में एक मज़ाक उड़ाया कतार में पारित करने के लिए किया जाएगा किया है होगा, हालांकि, प्ले के साथ! नियंत्रक स्थिर हैं, इसका मतलब है कि मैं अपने परीक्षणों में new MyController(mockedQueue)
नहीं कर सकता।
मैं Google Guice का उपयोग कर सकता हूं और मेरे नियंत्रक में स्थिर क्षेत्र पर @Inject
एनोटेशन डाल सकता हूं, लेकिन यह मेरे लिए बहुत अच्छा नहीं लगता है, क्योंकि इसका मतलब है कि मुझे परीक्षण में जगह बदलने के लिए क्षेत्र को सार्वजनिक करना है , या मुझे अपने परीक्षणों में एक कंटेनर का उपयोग करना है। मैं कन्स्ट्रक्टर इंजेक्शन का उपयोग करना पसंद करूंगा, लेकिन खेलो! ऐसा करने के लिए प्रतीत नहीं होता है।
मॉडल दृष्टिकोण
यह अक्सर कहा जाता है अपने तर्क अपने मॉडल नहीं, बल्कि आपके नियंत्रक में होना चाहिए। यह समझ आता है; हालांकि, हम यहां रूबी में नहीं हैं और आपकी संस्थाएं बाहरी सेवाओं (ईमेल, संदेश कतार इत्यादि ...) के साथ बातचीत कर रही हैं, एक गतिशील वातावरण की तुलना में काफी कम परीक्षण योग्य है जहां आप अपने MessageQueue
स्थिर कॉल को मॉक किए गए इंस्टेंस के साथ बदल सकते हैं मर्जी।
अगर मैं अपनी इकाई को कतार में कॉल करता हूं, तो यह कैसे टेस्टेबल है?
बेशक, अगर मैं एंड-टू-एंड एकीकरण परीक्षण करता हूं तो ये दोनों स्थितियां अनावश्यक हैं, लेकिन मुझे अपने परीक्षणों के लिए संदेश कतार या एसएमटीपी सर्वर की आवश्यकता नहीं है।
तो मेरा प्रश्न है: मैं अपने Play को कैसे मॉडल करूं! बाहरी सेवाओं के साथ परीक्षण इंटरैक्शन की सुविधा के लिए नियंत्रक और/या मॉडल?
दिमाग में बेहतर स्पष्टीकरण के साथ अद्यतन उत्तर 'सेवा फैक्टरी' दृष्टिकोण के साथ एक * संभावित * मुद्दा तब होता है जब फ़ील्ड प्रारंभ किया जाएगा; चूंकि यह एक स्थिर क्षेत्र है, उदाहरण प्राप्त करने का मौका मिलने से पहले 'getInstance' को प्रारंभकर्ता द्वारा बुलाया जा सकता है। बस जोर से सोचते हुए, वास्तव में यह सत्यापित नहीं किया। –
असल में, उदाहरण में, सर्विसफैक्टरी एक सिंगलटन है। आप स्वयं सेवाफैक्टरी को प्रतिस्थापित नहीं करेंगे, लेकिन क्यूई सेवा जो इसे 'उत्पादन' करती है। –
हाँ, मैं समझता हूं; हालांकि, जैसा कि क्षेत्र स्थैतिक है, वहां संभावना है कि इससे पहले कि आप 'getInstance' से वापस लौटाए गए मूल्य को प्रतिस्थापित करने में सक्षम हो जाएं। स्थैतिक प्रारंभकर्ता निष्पादित होने पर आपके पास आमतौर पर नियंत्रण नहीं होता है, इसलिए यह आपके परीक्षण सेटअप होने से पहले हो सकता है। –