2010-10-19 18 views
14

नकली या अनुकरण करें एक संदेश (पाठ) है, जो प्रारूप और सामग्री मुझे निश्चित रूप से पता है।
अभी के लिए, जावा में कक्षा, जो फ़ाइल से इस संदेश को पार करती है और पढ़ती है, लागू की जाती है।संदेश कतार (जेएमएस)

असली दुनिया में, इस संदेश को संदेश क़तार से आ जाएगा।

अभी के लिए मैं, अनुकरण करना चाहिए नकली या परीक्षण प्रयोजनों के लिए अपने स्थानीय पीसी पर संदेश कतार उत्पन्न करते हैं।

जावा कल्पना (java jms):

JMS provider: A messaging system that implements the JMS specification. 
JMS clients: Java applications that send and receive messages. 
Messages: Objects that are used to communicate information between JMS clients. 

इस विनिर्देश के संबंध में, मैं JMS प्रदाता की जरूरत है।

जेएमएस क्लाइंट-यह मेरी कक्षा है जो संदेश पढ़ती है।
संदेश स्वयं ही मुझे पता है।

तो सवाल यह है कि संदेश कतार शुरू करने के लिए है?
मैं जावा कोड से प्रोग्राममैटिकल कैसे अनुकरण कर सकता हूं? क्या मैं इसे किसी तरह से नकल कर सकता हूं?

धन्यवाद।

+1

उन सभी परेशानी क्यों करें? क्यों न केवल अपने वर्कस्टेशन पर एक स्थानीय जेएमएस प्रदाता स्थापित करें और इसका इस्तेमाल करें? आप विक्रेता जेएमएस प्रदाताओं के ओपन सोर्स वाले और परीक्षण संस्करण डाउनलोड कर सकते हैं। चूंकि यह जेएमएस है, इसलिए कोई भी कार्यान्वयन इकाई परीक्षण के लिए काम करेगा। –

+0

मैं पूछता हूं, इसलिए मुझे जेएमएस प्रदाता स्थापित करने की आवश्यकता है। आप मुझे क्या सलाह दे सकते हैं? धन्यवाद – sergionni

+0

ठीक है, मैं एक आईबीएमर हूं इसलिए मुझे डब्लूएमक्यू के परीक्षण का सुझाव देना है। :-) लेकिन मुझे लगता है कि आप पहले से ही ActiveMQ पा चुके हैं जिसका उपयोग आप इसे समाप्त होने के बिना विकास के लिए कर सकते हैं। दूसरी तरफ, जो कुछ भी आप उत्पादन में उपयोग करते हैं, उस पर आगे बढ़ना सबसे अच्छा होगा ताकि एक बार जब आप जान सकें कि यह क्या होगा। –

उत्तर

5

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

1

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

प्रक्रिया के लिए JMS आप SomnifugiJMS को देखने के कर सकते हैं।

+28

मैं पूरी तरह से असहमत हूं। यूनिट परीक्षणों के लिए बाहरी प्रणाली का मज़ाक करना महत्वपूर्ण है, खासकर यदि आप बाहरी इंटरफेस पर भरोसा करते हैं और अपने यूनिट परीक्षणों को एकीकरण परीक्षण में बदलना नहीं चाहते हैं। –

+0

@ank - यह * बाहरी प्रणाली का नकल करने के लिए एक बुरा अभ्यास है। समाधान उस प्रणाली के लिए एक इंटरफ़ेस बनाना है जो आपके स्वयं के अनुप्रयोग (बीन जो यूजीन कुल्शोव का जिक्र कर रहा है) जो बाहर की प्रणाली को संचार संभालता है, और फिर परीक्षण में, आप * उस * का मज़ाक उड़ाते हैं। पूरे बाहरी सिस्टम का नकल करने की कोशिश महंगा और गन्दा है। – Ickster

+2

@Ickster कि एक नकली की परिभाषा है ... (मुझे पता है कि यह पुराना है, लेकिन) क्या आप उस भेद के लिए एक उदाहरण प्रदान कर सकते हैं जिसे आप मानते हैं कि आप बना रहे हैं? – davemyron

-1

आम तौर पर मैं यूजीन कुल्शोव से सहमत हूं। लेकिन अगर आपको अभी भी इस तरह के मजाक की ज़रूरत है तो मैं आपको java.util.concurent पैकेज से ब्लैकिंगक्यूयू का उपयोग करने का सुझाव दूंगा। मुझे लगता है कि इसे javax.jms.Queue इंटरफ़ेस से लपेटना एक बड़ी समस्या नहीं है। बीटीडब्ल्यू किसी प्रकार की ओपन-सोर्स प्रोजेक्ट के लिए यह एक अच्छा विचार है। जब वास्तविक उत्पादन JMS प्रदाता उपलब्ध नहीं है

+0

मुझे अभी अपाचे ActiveMQ मिला है। पहले के लिए यह कोशिश कर रहा है। – sergionni

1

अलगाव में एक आवेदन का परीक्षण करने के लिए आप से एक का उपयोग कर सकते हैं:

  1. JMS नकली: जब अपने आवेदन पत्र का परीक्षण आप उपयोग कर गैर मौजूदा निर्भरता अनुकरण कर सकते हैं test doubles। आप एक जेएमएस मॉक का उपयोग कर सकते हैं जो वास्तविक जेएमएस प्रदाता के व्यवहार को अनुकरण करेगा। API simulation tools आपको जेएमएस मैक्स बनाने की अनुमति देगा (बस एक उपकरण जेएमएस का समर्थन करता है, उदाहरण के लिए Traffic Parrot)। एक जेएमएस मॉक का उपयोग करने से आप परीक्षण के दौरान उच्च स्तर की लचीलापन की अनुमति देंगे। आप सामान्य उत्पादन-जैसे परीक्षण परिदृश्यों का परीक्षण करने में सक्षम होंगे, लेकिन लगभग किसी भी प्रकार के संदेश को वापस करने के लिए अपने नकली को स्थापित करके परिकल्पनात्मक परिस्थितियों का परीक्षण करने में सक्षम होंगे। आप विभिन्न प्रकार की त्रुटियों का अनुकरण करने में भी सक्षम होंगे, जो वास्तविक जेएमएस प्रदाताओं के साथ अक्सर करना मुश्किल होता है। this introduction video to JMS service virtualization for ActiveMq पर एक नज़र डालें (सेवा वर्चुअलाइजेशन एक नकली के लिए एक अलग नाम है) या this one for IBM MQ। नोट, ये वीडियो ट्रैफिक तोते से हैं, लेकिन वहां वर्णित सिद्धांत आपके द्वारा चुने गए किसी भी टूल पर लागू होगा।

  2. जेएमएस प्रदाता परीक्षण उदाहरण: आप अपने लैपटॉप पर या अपने परीक्षण वातावरण में एक जेएमएस प्रदाता चला सकते हैं और उत्पादन प्रदाता की बजाय अपने आवेदन को कनेक्ट कर सकते हैं। जब आप ActiveMQ या RabbitMQ जैसे उत्पादन में ओपन सोर्स प्रदाताओं का उपयोग करते हैं, तो उनमें से एक को अपने लैपटॉप पर भी चलाने में आसान होना चाहिए क्योंकि वे हल्के और नि: शुल्क हैं। आईबीएम वेबस्पेयर एमक्यू के लिए, आप मुफ्त IBM MQ for Developers का उपयोग कर सकते हैं।

  3. जेएमएस क्लास मॉक: आप जेएमएस कक्षाओं के साथ बातचीत करने के लिए यूनिट परीक्षणों में Mockito का उपयोग कर सकते हैं। यह समाधान इकाई परीक्षण के सभी व्यापार-बंद के साथ आता है। उन लोगों के बारे में अधिक जानकारी के लिए testing pyramid देखें। यदि आप ब्लैक बॉक्स को अपने एप्लिकेशन का परीक्षण करना चाहते हैं, तो मैंने ऊपर वर्णित समाधानों में से एक का उपयोग करें।

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