ग्रीटिंग्स स्टैक ओवरफ्लॉवर,यूनिट परीक्षण सॉकेट
मेरे पास एक ऐसा एप्लिकेशन है जिसमें संचार अबास्ट्रक्शन परत मौजूद है। कनेक्टर नामक इस परत में प्रत्येक कार्यान्वयन, मेरे एप्लिकेशन को एक कनेक्टेड पीयर (जैसे: HTTP, टीसीपी सॉकेट, यूडीपी सॉकेट इत्यादि) के साथ डेटा का आदान-प्रदान करने का एक तरीका प्रदान करता है।
उदाहरण के अनुसार, मैं एक Connector_Tcp
वर्ग, लिखने, खुला और पास कि तरीकों जैसे पढ़ लागू करता है।
मुझे उस कक्षा के लिए एक यूनिट परीक्षण लिखने की आवश्यकता है। मुझे पता है कि यूनिट परीक्षणों को यथासंभव कम निर्भरता होनी चाहिए। दुर्भाग्यवश, उस स्थिति में, निर्भरता एक सिस्टम संसाधन है: एक सॉकेट; और मैं इसे बाईपास नहीं कर सकता।
मुझे इस वर्ग की इकाई परीक्षण के बारे में कुछ सलाह चाहिए।
मेरी राय में, भले ही इस वर्ग के एक सिस्टम संसाधन उपयोग कर रहा है, यह सब अन्य कनेक्टर्स यकीन है कि यह मानक अपने आवेदन द्वारा स्थापित किया गया सम्मान करता है बनाने के लिए के रूप में परीक्षण किया जाना चाहिए।
मैं बाध्यकारी टकराव (पता पहले से उपयोग में त्रुटियों) और अवरुद्ध करने जैसी चीजों के बारे में चिंतित हूं। मैं नहीं चाहता कि इकाई परीक्षण विफल हो क्योंकि बंदरगाह पहले से ही एक सिस्टम सेवा द्वारा उपयोग में है जिसका मेरे आवेदन से कोई लेना देना नहीं है।
मैंने अपने दिनों में बहुत सारे यूनिट परीक्षण किए हैं, लेकिन इनमें से कोई भी ऐसे निम्न-स्तरीय संसाधनों पर निर्भर नहीं है जो सॉकेट हैं।
आप एक सॉकेट-निर्भर वर्ग की इकाई परीक्षण के बारे में कैसे जाएंगे? प्रत्येक इकाई के लिए एक सॉकेट खोलें? एक सर्वर सर्वर का उपयोग करें, फिर इसे मैन्युअल रूप से परिभाषित सॉकेट संसाधन से कनेक्ट करने और इसका परीक्षण करने के लिए ...?
मुझे लगता है कि मेरी समस्या वास्तव में निम्नलिखित है:
इकाई परीक्षण में विफल रहता है ... कैसे करना है मैं जानता हूँ कि यदि:
- सॉकेट अन्य प्रक्रिया द्वारा उपयोग में पहले से ही है,
- इकाई परीक्षण बुरी तरह लिखा गया है; या
- विधि अनुचित तरीके से व्यवहार करती है (जो यूनिट परीक्षण योग्य है)।
मैं इकाई परीक्षण की जरूरत है केवल परीक्षण करने के लिए करता है, तो विधि ठीक से या नहीं व्यवहार कर रहा है ...
मैंने कोई वास्तविक PHP विकास नहीं किया है, लेकिन क्या आप अपनी सॉकेट कक्षा से प्राप्त एक नकली कक्षा बना सकते हैं? – Dave
@ डेव: मैं कर सकता हूं। मैं प्रत्येक एकल वर्ग के लिए नकली वस्तुओं का उपयोग करता हूं जिसके लिए एक कनेक्टर की आवश्यकता होती है। मेरी समस्या यह है: मुझे यह सुनिश्चित करने के लिए सॉकेट क्लास का परीक्षण करने की ज़रूरत है कि यह अबास्ट्रक्शन लेयर के सम्मेलनों का सम्मान करता है ... एक नकली वस्तु का परीक्षण करके, यह स्पष्ट रूप से मुझे नहीं बताता है कि सॉकेट क्लास काम करता है या नहीं। – netcoder
मेरी राय में यूनिट परीक्षण करने के लिए एक व्यावहारिक सीमा है। मैं सॉकेट का परीक्षण करने की कोशिश नहीं करता। मुझे लगता है कि आपके मामले में, सॉकेट आपके आवेदन के बाहर पहुंच योग्य हो सकता है, इसलिए आपको कनेक्टर के चारों ओर यूनिट परीक्षण लिखने के लिए सबसे अच्छा करना होगा और यह सुनिश्चित करना होगा कि यह सभी असाधारण स्थितियों को संभाल ले। आपने "उपयोग में पहले से ही पता" त्रुटियों का उल्लेख किया है, इसलिए एक चीज जो मैं करूँगा यह सुनिश्चित कर लें कि मेरा कनेक्टर इस स्थिति के कारण मर नहीं गया है। मैं एक इकाई परीक्षण इस स्थिति को बनाऊंगा और यह सुनिश्चित करता हूं कि यह इसे पकड़ लेगा। – Dave