2009-09-29 8 views
5

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

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

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

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

कोई सुझाव?

उत्तर

4

binary serialization के साथ प्रयास करें।

ऊपर हिस्सा है जहाँ आप को बचाने/जानकारी या कुछ वस्तुओं की जानकारी है कि आप उस बाहरी प्रणाली के साथ बातचीत का परीक्षण करने के लिए उपयोग पकड़े लोड करना चाहते हैं के लिए विशेष रूप है। मैं उन परीक्षणों को केंद्रित एकीकरण परीक्षणों को कॉल करना पसंद करता हूं, जो आपके शेष कोड के यूनिट परीक्षणों से फोकस के अंतर को बेहतर तरीके से पकड़ने के लिए आपके पास हो सकते हैं।

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

+0

+1 कोई बुरा सुझाव नहीं है, लेकिन इसके लिए यह आवश्यक है कि प्रश्नों के प्रकार serializable –

+0

@ मार्क वाई हैं, जो वास्तव में उस हिस्से के लिए अधिक था जहां वह बाहरी सिस्टम के साथ आदान-प्रदान अनुरोध/प्रतिक्रियाओं को सहेजने/लोड करने पर बात करता है - तो मैं सरल वस्तुओं को सोच रहा हूँ। मैं एक ही दृष्टिकोण के साथ बाकी परीक्षणों में जाने की सिफारिश नहीं करता। – eglasius

+0

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

3

फ्रेडी रियोस उसके जवाब में संकेत के रूप में, आप में स्मृति वस्तु बने, ताकि आप अपनी इकाई परीक्षण से यह पुनः उपयोग कर सकते की किसी तरह की जरूरत है। Memento design pattern एक अच्छी शुरुआत है, और क्रमबद्धता इसे कार्यान्वित करने का डिफ़ॉल्ट .NET तरीका है।

इससे सवाल उठता है कि उन वस्तुओं को आसानी से कैप्चर करना है। यहां एक दृष्टिकोण है जिसे आप आजमा सकते हैं:

इंटरफ़ेस के पीछे आपके संसाधन से संचार को सार करें। यह हमेशा एक अच्छा डिजाइन निर्णय है।

जब आप ऐसा करते हैं, आप Decorator design pattern उपयोग कर सकते हैं कि इंटरफ़ेस के आपके वास्तविक कार्यान्वयन रैप करने के लिए। इसका मतलब यह है कि आप एक डेकोरेटर कि बस रिकॉर्ड (serializes) बातचीत, लेकिन प्रतिनिधियों सभी कॉल्स एक अंतर्निहित कार्यान्वयन के लिए के बाद यह सवाल में वस्तुओं दर्ज हो गया है बना सकते हैं।

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

तुम सच में फैंसी होना चाहते हैं, तो आप भी मेमेंटो डेकोरेटर लागू कर सकते हैं इतना है कि यह इकाई परीक्षण कोड है कि बातचीत है कि दर्ज की गई थी की नकल करता उत्सर्जन करता है, लेकिन यह प्रयास भी पर्याप्त मात्रा में आवश्यकता होती है की संभावना है ...

+0

+1। – eglasius

+0

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

+0

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

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