2010-05-26 19 views
6

मैं इकाई परीक्षण के साथ शुरू कर रहा हूं और कुछ टीडीडी करने की कोशिश कर रहा हूं। मैंने इस विषय के बारे में काफी कुछ पढ़ा है और कुछ परीक्षण लिखे हैं। मैं सिर्फ यह जानना चाहता हूं कि निम्नलिखित सही दृष्टिकोण है या नहीं।मुझे नियंत्रक से ईमेल भेजने का परीक्षण कैसे करना चाहिए?

मैं अपनी वेबसाइट पर सामान्य "हमसे संपर्क करें" सुविधा जोड़ना चाहता हूं। आप इस बात को जानते हैं, उपयोगकर्ता अपने ईमेल पते के साथ एक फॉर्म भरता है, एक संक्षिप्त संदेश में प्रवेश करता है और फॉर्म को वापस पोस्ट करने के लिए बटन दबाता है।

मॉडल बाइंडर्स अपनी सामग्री करते हैं और मेरी क्रिया विधि पोस्ट किए गए डेटा को मॉडल के रूप में स्वीकार करती है। कार्रवाई विधि तब मॉडल को पार्स करेगी और वेब साइट प्रशासक को ईमेल भेजने के लिए smtp का उपयोग करेगी, जिससे किसी ने उन्हें अपनी साइट पर संपर्क फ़ॉर्म भर दिया होगा।

अब प्रश्न के लिए .... इस परीक्षण करने के लिए में, मैं एक अंतरफलक IMessageService एक विधि संदेश (EMAILADDRESS, संदेश) ईमेल पते और संदेश के मुख्य भाग को स्वीकार नहीं है बनाने में सही होगा। एक ठोस वर्ग में इंटीफेस को कार्यान्वित करें और उस वर्ग को smtp सामान से निपटने दें और वास्तव में मेल भेजें।

यदि मैं अपने नियंत्रक कन्स्ट्रक्टर के पैरामीटर के रूप में इंटरफ़ेस जोड़ता हूं तो मैं कंट्रोल क्लास को नियंत्रक में इंजेक्ट करने के लिए DI और IoC का उपयोग कर सकता हूं। लेकिन जब यूनिट परीक्षण मैं अपने IMessageService का नकली या नकली संस्करण बना सकता हूं और उस पर दावा कर सकता हूं।

कारण मैं पूछता हूं कि मैंने SmtpClient के लिए इंटरफेस उत्पन्न करने वाले लोगों के अन्य उदाहरण देखे हैं और फिर उस पर मजाक कर रहे हैं। क्या वास्तव में अब तक जाने की कोई ज़रूरत है या क्या मैं इस सामान को समझ नहीं रहा हूं?

उत्तर

2

आपको अभी भी मेलर को आमंत्रित करने वाली अपनी कक्षा का परीक्षण करने की आवश्यकता होगी। मेरा सुझाव है कि आप दोनों को थोड़ा सा करना चाहें। मैं आमतौर पर एक IMailClient इंटरफ़ेस और SmtpClient के चारों ओर एक रैपर बनाता हूं जो इंटरफ़ेस लागू करता है। एक प्रॉक्सी क्लास में इंटरफ़ेस का उपयोग करें (और इंजेक्ट करें) जो जानता है कि संदेश कैसे बनाएं और इसे भेजें (इसमें कई फैक्ट्री-प्रकार विधियां हो सकती हैं जो कई अलग-अलग प्रकार के संदेशों का निर्माण कर सकती हैं)। SmtpClient के चारों ओर झुकाव वास्तव में ऐसा होना चाहिए, इस प्रकार यूनिट परीक्षण के लिए इसकी आवश्यकता कम है। प्रॉक्सी क्लास का परीक्षण करते समय आप अपने शिम का मज़ाक उड़ा सकते हैं और अपने नियंत्रकों का परीक्षण करते समय अपनी प्रॉक्सी कक्षा का नकल कर सकते हैं।

+0

मैं सहमत हूं, और जैसे ही आपको उस IMailClientAsync टी की आवश्यकता होती है, जिसे आप स्वैप कर सकते हैं। – Hal

1

आपके द्वारा वर्णित अपमान ने अतीत में मेरे लिए अच्छा काम किया है। मैंने एक परियोजना पर काम किया जो एमएस डायनेमिक्स सीआरएम वेब सेवा एपीआई के साथ इंटरफेस किया गया। मैं इकाई को अपने कोड का परीक्षण करना चाहता था, लेकिन मुझे वेब सेवा का परीक्षण करने की कोई इच्छा नहीं थी। मैंने आपके द्वारा वर्णित सटीक प्रक्रिया का पालन किया लेकिन मेल वितरण के बजाय वेब सेवा के साथ मजाक किया। यह बहुत अच्छा काम किया।

1

आप सही रास्ते पर हैं, यही वह दृष्टिकोण है जिसका आप उपयोग करना चाहिए। शायद जिन उदाहरणों का आप उल्लेख कर रहे हैं, वे लोग कठिन/गलत तरीके से जा रहे हैं ... या उदाहरण हैं कि आप एक बड़े विरासत कोड बेस से कैसे निपट सकते हैं।

संदेश वितरित करने के लिए तंत्र को इंजेक्शन देना लचीला है, और यह आसानी से अन्य परिदृश्यों में पुन: उपयोग करता है। ऐसा एक परिदृश्य निदान है, यदि आपके पास एक देव सर्वर है, तो संभवतः आप इंजेक्शन क्लास को स्विच करके मेल को मारना नहीं चाहते हैं, तो आप इसे फ़ाइल में आउटपुट कर सकते हैं या बस सरल डीबग। राइट।

ps। आपको अभी भी अपनी SmptDeliver क्लास का परीक्षण करने की अनुशंसा की जाती है, लेकिन यह एक केंद्रित एकीकरण परीक्षण होगा जो आप उस वर्ग पर शेष कोड के स्वतंत्र रूप से कर सकते हैं।

1

मुझे लगता है कि आप सही रास्ते पर हैं। Smtp सर्वर या कुछ और के बारे में चिंता मत करो। बस यूनिट परीक्षण जो आपको चाहिए। परीक्षणों को आपको बताएं कि आपको क्या चाहिए।जब आप वास्तविक Send(emailAddress, message) के परीक्षण पर जाते हैं, तो आप इस बारे में चिंता कर सकते हैं कि आप वास्तव में व्यवस्थापक को संदेश कैसे भेजेंगे।

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