2009-06-22 13 views
29

मैं कुछ मॉडल वर्गों पर यूनिट परीक्षण (जुनीट) चलाने के लिए चाहता हूं जो आम तौर पर यह पुष्टि करते हुए ईमेल भेज देंगे कि चीजें हुई हैं। क्या कोई नकली ईमेल सर्वर है जिसका उपयोग आप यूनिट परीक्षणों के साथ कर सकते हैं जो आपको यह पुष्टि करने देगा कि आपके रन ने वास्तव में ईमेल भेजने के बिना ईमेल भेजने का प्रयास किया है?ईमेल के बिना जूनिट ईमेल टेस्ट चलाना वास्तव में

ऐसा लगता है कि यह अच्छा होगा, बस यह सुनिश्चित नहीं है कि मैं अपना खुद लिखना चाहता हूं। ईमेलिंग पहलू के लिए ऐप स्टैक Velocity + Spring है, इसलिए यह बेहतर होगा अगर परीक्षण सर्वर को केवल ApplicationContext.xml फ़ाइल को बदलकर इंगित किया जा सके।

+0

मेरा उत्तर http://stackoverflow.com/questions/8599791/a-simple-local-smtp-server/22043597#22043597 चेक –

उत्तर

27

वैकल्पिक उत्तर: Dumbster एक नकली एसएमटीपी सर्वर है जो परीक्षण के लिए डिज़ाइन किया गया है। यह जावा में लिखा है।

+4

+1, हालांकि SubEthaSMTP डंबस्टर की तुलना में काम करना आसान हो सकता है। –

+0

यह वही करता है जो मैंने पूछा था। मैं अब इसके लिए उपयोग करने जा रहा हूं, मैं संभवत: टेस्ट अप को गति देने के लिए किसी बिंदु पर एक नकली वस्तु का उपयोग करने के लिए स्विच करूँगा। – stevedbrown

+1

बस एक नोट - डंबस्टर के साथ चल रहा है, मेरा यूनिट परीक्षण सर्वर को स्टार्टअप करने के लिए लगभग 500ms ले रहा है, एक ईमेल भेजता है, और परीक्षण करता है कि ईमेल भेजा गया था। यह मेरे जर्सी ढांचे के परीक्षणों से काफी बेहतर है जो उम्र लेते हैं। – stevedbrown

0

फिल हैक के पास blog post about unit testing email sending है, जिस समाधान के साथ उसने एक फ्रीवेयर मेल सर्वर के चारों ओर कोड किया था।

14

मुझे लगता है कि Mock JavaMail प्रोजेक्ट वह है जो आप चाहते हैं।

+0

बिल्कुल - एक 3 पार्टी बाहर कभी नहीं नकली खुद के इंटरफेस, यह शायद ही कभी है समय के लायक (यदि आप चाहते हैं - PowerMock का उपयोग करें)। लेकिन इस मामले में, बस मॉक जावामेल को जगह में छोड़ दें, और जादुई रूप से आपके सभी संदेशों को जांच और जोर देने के लिए आपके लिए एक मेल मेलबॉक्स में रखा जाएगा। सरल और प्रभावी (बस इसे अपने उत्पादन वर्गपैथ से बाहर रखें!) – Phantomwhale

+0

एक क्विकस्टार्ट है: http://ollivander.franzoni.eu/2011/08/30/mock-javamail-primer/ – jediz

+1

लिंक की गई साइट बंद है। – holmis83

0

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

यह जांचने के लिए कि मेल सेवा स्वयं काम करती है, स्वयं को स्थानीय रूप से एक मेल भेजें। यदि आप विंडोज पर हैं तो hMail आज़माएं।

+0

मैं विंडोज पर विकसित करता हूं, लेकिन मैं उबंटू पर निरंतर एकीकरण सर्वर चलाता हूं, जिससे यह काम नहीं करेगा। – stevedbrown

+0

निश्चित रूप से; पते "localhost" या "127.0.0.1" का उपयोग करें और विंडोज के रूप में मेल के लिए उबुनुतू पर एक ही खाता जोड़ें। मुझे यकीन नहीं है कि उबंटू क्या उपयोग करता है लेकिन इसमें पहले से ही एक मेल सर्वर स्थापित है। शायद qmail या postfix। इस दृष्टिकोण के लिए –

3

मुझे लगता है कि आप जावामेल का उपयोग कर रहे हैं और समस्या यह है कि javax.mail.Session अंतिम है और इसलिए इसका मज़ाक उड़ाया नहीं जा सकता है।

ऐसा लगता है कि अन्य लोगों ने सुझाव दिया है कि आप बस अपना खुद का 'मेल सत्र' इंटरफ़ेस परिभाषित करें और जवामेल का उपयोग करने वाले कार्यान्वयन को बनाएं। अपने परीक्षणों में आप केवल 'असली-दुनिया-मोड' में एक नकली इंजेक्ट करते हैं, आप जावामेल कार्यान्वयन को इंजेक्ट करते हैं।

जेएमॉक और ईज़ीमोक दोनों उन सभी दावों का समर्थन करेंगे जो आप संदेश भेज रहे हैं और आप परीक्षण पूरा कर सकते हैं।

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

+0

में मर चुका है यह वास्तव में एक अच्छी टिप्पणी है और मुझे अपने दृष्टिकोण के बारे में कुछ और सोचने के लिए तैयार किया गया है। मैं एक प्रक्रिया को विकसित करने के बारे में सोच रहा था, लेकिन अधिक संभावना है, मुझे अपने वसंत कॉन्फ़िगरेशन xml में एक बीन को तुरंत चालू करना चाहिए जो एक ईमेल सर्वर को मेल करता है। – stevedbrown

+0

हाय स्टीव - यह बिल्कुल सही बात है। यदि आपके पास एक और प्रक्रिया है जो आपके एंड-पॉइंट के रूप में चल रही है तो अचानक अचानक आवेषण कठिन हो जाते हैं, इसलिए आपका परीक्षण यह सुनिश्चित कर लेता है कि आपको दूसरी प्रक्रिया से त्रुटियां नहीं मिलती हैं, जो शायद वही नहीं है क्रोध में इस्तेमाल किया जाएगा, इसलिए वास्तव में एक म्यूट टेस्ट है - मुझे लगता है कि जावामेल कामों को मानना ​​सुरक्षित है ;-) मजाकिया दृष्टिकोण आपको संदेश की सामग्री को सत्यापित करने की अनुमति देता है जो मुझे लगता है कि असली परीक्षा है .... –

1

आप कोशिश कर सकते हैं JavaMail Mock2 https://github.com/salyh/javamail-mock2

इसके मुख्य रूप से IMAP/पॉप 3 पर ध्यान केंद्रित लेकिन एसएमटीपी मॉक भी उपलब्ध है। यह मेवेन केंद्रीय में उपलब्ध है।

विशेषताएं

  • समर्थन imap, IMAPS, POP3, POP3S, smtp, smtps
  • पॉप 3 के लिए समर्थित: POP3Folder, Folder.getUID (संदेश msg) करने के लिए डाली
  • IMAP के लिए समर्थित: करने के लिए डाली IMAPFolder, UIDFolder, उप-फ़ोल्डर, -Folder.getMessagesByUID लिए डाली (...), हटाने/फ़ोल्डर का नाम बदलने, SMTP के लिए संदेशों संलग्न
  • समर्थन: नकली Transport.send() पल के लिए
  • असमर्थित: IDL की तरह IMAP एक्सटेंशन ई, कोंस्टोर, ...और POP3 संदेश/IMAPMessage, स्टोर श्रोताओं को स्टोर करता है
8

मैं ग्रीनमेल को देखता हूं जो जीवित है (स्पष्ट रूप से डंबस्टर मर चुका है) बहुत सारी कार्यक्षमता और अच्छे उदाहरणों के साथ।

http://www.icegreen.com/greenmail/

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