2010-05-27 15 views
7

मुझे सीरियल बंदरगाहों से संबंधित बहुत सारे कोड लिखना है। आम तौर पर तार के दूसरे छोर पर एक उपकरण जुड़ा होता है और मैं आमतौर पर अपने व्यवहार को अनुकरण करने के लिए अपने स्वयं के मोजे बना देता हूं।मैं मूक पुस्तकालय का उपयोग कर एक सीरियलपोर्ट मॉक कैसे बना सकता हूं?

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

एक साधारण उदाहरण:

उपकरणों मैं के साथ इंटरफेस में से एक, एक कमांड (करने के लिए स्थिति एक्स चाल) प्राप्त करता है वापस देता है एक एसीके संदेश और जब तक यह आदेश दिया स्थिति तक पहुँच जाता है "गतिमान" राज्य को जाता है।

मैं एक परीक्षण बनाना चाहता हूं जहां मैं चाल कमांड भेजूं और फिर अंतिम स्थिति तक पहुंचने तक क्वेरीिंग स्थिति रखें।

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

पूछने के लिए बहुत कुछ?

उत्तर

4

यदि आपके प्रोग्राम में सीरियल पोर्ट ऑब्जेक्ट के लिए इंटरफ़ेस है, तो मोक एक नकली सीरियल पोर्ट ऑब्जेक्ट बनाकर ऐसा कर सकता है (Moq किसी भी जटिलता के दोनों स्टब्स और मैक्स के लिए अच्छा है)।

इससे पहले कि वे हार्डवेयर तक पहुँचने (एक सीरियल पोर्ट इंटरफेस और कार्यान्वयन, प्लस एक परीक्षण कार्यान्वयन बनाए बिना) आप के लिए अवरोधन बीसीएल SerialPort वर्ग के लिए कॉल करना चाहते हैं, तो आप और अधिक शक्तिशाली कुछ की जरूरत है। यही है Moles के लिए है।

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

+0

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

0

यदि आप मोजे के साथ टीडीडी कर रहे हैं तो आपको अपने परीक्षणों को अपनी वस्तुओं को परिभाषित करना चाहिए। यह पहले से ही लगता है कि आपके पास कोई परीक्षण लिखने से पहले आपके मन में एक डिज़ाइन है।

आपका प्रारंभिक डिजाइन किया गया है:

  • कमान इस
  • कमान रिसीवर
  • मतदान (अतुल्यकालिक/तुल्यकालिक)
  • परिणाम करके आप एक Timeout समारोह

है कि होना आवश्यक है पहले से ही जिम्मेदारियां हैं कि आपके SerialController को लागू करना होगा। वाह यह किसी भी परीक्षण के बिना लागू करने के लिए बहुत कुछ है।

अच्छा और आसान प्रारंभ करें।

'अंतिम उत्तरदायी क्षण' के विचार के साथ प्रयास करें और परीक्षण करें।

इसके अलावा आप जिस वाक्यविन्यास का उपयोग करने जा रहे हैं उसके बारे में क्या?

यह तो आपको देखना चाहें: how-to-test-reliability-of-my-own-small-embedded-operating-system

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

बीटीडब्लू, यह आपके काम को बहुत रोमांचक लग रहा है।

+0

उत्तर के लिए धन्यवाद। सभी मान्य विचारधाराएं, लेकिन मेरा मानना ​​है कि हम एक ऐसे चर्चा में पड़ने पर जोखिम उठा रहे हैं जो मेरे प्रश्न के मूल में नहीं है। मैंने दोनों शैलियों की कोशिश की है और मुझे अभी भी लगता है कि परीक्षण से पहले कुछ डिज़ाइन फायदेमंद है लेकिन मैं दोनों तरफ देखता हूं। मेरा प्रश्न हालांकि विशेष रूप से मोक का उपयोग करने के तरीके के बारे में अधिक स्पष्ट रूप से तैयार है जो मैं वर्तमान में मैन्युअल रूप से कर रहा हूं। –

+0

@ पडू - मुझे लगता है कि @Stephen पर आपकी टिप्पणी मेरे बिंदु को मजबूत करती है ... लेकिन अन्य कुछ बेहतर सिमुलेशन लागू करते हैं। मजाक करना * स्मार्ट * अनुकरण करना नहीं चाहिए। यही कारण है कि मैं यह इंगित करने की कोशिश कर रहा था कि आपके परीक्षण परिदृश्य में नकली ढांचे का प्रभावी ढंग से उपयोग करने के लिए बहुत कुछ चल रहा है। – Gutzofter

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

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