2009-02-14 19 views
5

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

कुछ बेहतर प्रथाओं परीक्षण व्यापार के लिए वस्तुओं, और अधिक विशेष जो कि पढ़ सकते हैं और एक डेटाबेस को लिखने क्या कर रहे हैं।

क्या विकास डेटाबेस से अलग परीक्षण डेटाबेस सेट करना सबसे अच्छा है, जहां उपयोगकर्ता इंटरफ़ेस का परीक्षण किया गया है, और बस उस डेटाबेस के खिलाफ परीक्षण करें? मूल रूप से बस इसे जंक डेटा के साथ भरना।

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

क्या आप एक परीक्षण विधि में प्रत्येक सीआरयूडी विधियों का परीक्षण करते हैं?

आखिरकार, तारों को सत्यापित करने जैसे व्यक्तिगत व्यवसाय नियमों के बारे में सही आकार के हैं, प्रारंभ तिथियां समाप्ति तिथियों से कम हैं, ग्राहक आईडी एक सही ग्राहक है और इसी तरह।

मुझे एहसास है कि यह एक बहुत व्यापक सवाल है ... बस कुछ दिशा की तलाश है ... बच्चे के कदम उठा रहे हैं।

अधिक जानकारी ...

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

एक अन्य प्रश्न ... क्या प्रत्येक टेस्ट विधि को अन्य परीक्षणों पर निर्भर नहीं रखना सर्वोत्तम है?

+0

यहां अंगूठे के कुछ अच्छे नियम http://msdn.microsoft.com/en-us/library/ms379625(VS.80).aspx पाए गए। सब कुछ जो कह रहा है उससे सहमत हैं। – mattruma

उत्तर

8

आदर्श रूप से, आपके पास ऐसी व्यावसायिक वस्तुएं होती हैं जो सीधे डेटाबेस तक नहीं पहुंचती हैं, लेकिन सहायक वस्तुओं या किसी प्रकार का ओआरएम (ऑब्जेक्ट-रिलेशनल मैपिंग) ढांचा का उपयोग करती हैं। फिर आप डेटाबेस के बिना अपने बीओ का परीक्षण कर सकते हैं, संभवतः कुछ सहायक वस्तुओं का मज़ाक उड़ा सकते हैं। यह शायद सबसे साफ तरीका है, क्योंकि आप वास्तविक डीबी की जटिलता से बचते हैं, और वास्तव में केवल अपने व्यापार तर्क का परीक्षण करते हैं।

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

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

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

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

+0

धन्यवाद! कुछ डीबी परीक्षण ढांचे क्या हैं? या यह कुछ है जो आप स्वयं बनाते हैं? – mattruma

+0

नहीं, बिंदु मौजूदा ढांचे का उपयोग करना है। मैं डीबीयूनीट का उपयोग करता हूं, http://www.dbunit.org, लेकिन कुछ भी हैं। बस "यूनिट परीक्षण डेटाबेस" के लिए Google। – sleske

1

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

5

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

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

+0

धन्यवाद! यह अच्छा लगता है, लेकिन बहुत सारे काम की तरह लगता है। मैं अपने व्यापार वस्तुओं के लिए सीएसएलए ढांचे का उपयोग कर रहा हूं, यह सुनिश्चित नहीं करता कि यह वास्तव में अनुवाद कैसे करेगा। – mattruma

2

dependency injection का उपयोग करें। एक इंटरफ़ेस में अपने डेटाबेस विधियों को लागू करें। फिर लागू परिदृश्यों का परीक्षण करने के लिए नियंत्रण डेटा के साथ इंटरफेस का एक नया कार्यान्वयन लिखें।

+0

धन्यवाद! मैं सीएसएलए का उपयोग अपने आवेदन ढांचे के रूप में कर रहा हूं, जो डी दोस्ताना प्रतीत नहीं होता है। मुझे यह करना प्रिय होगा! – mattruma

1

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

मेरे अभ्यास में, मैं एक एक्सएमएल में परीक्षण डेटा सेट रखता हूं और प्रत्येक परीक्षण से पहले, यह एक्सएमएल का उपयोग कर डीबी में डेटा सेट करता है। तो प्रत्येक टेस्ट कुछ डेटासेट के खिलाफ चलता है।

1

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

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

0

(मैं आप उपयोग जावा नहीं है पता है, लेकिन सामान्य रणनीति नीचे बिल्कुल जावा पर निर्भर नहीं करता)

मैं एक जावा परियोजना EJB3/जेपीए कोड का एक बहुत का उपयोग करता है पर काम कर रहा हूँ। मैंने ईजेबी को "तैनात" करने में सक्षम एक प्रकार का नकली कंटेनर बनाने और हाइबरनेट इकाई प्रबंधक के साथ एक इन-मेमोरी डेटाबेस (एचएसक्यूएल) का उपयोग करने का निर्णय लिया।

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

अब तक यह एक बड़ी सफलता रही है, लेकिन मुझे नकली आधारभूत संरचना को लागू करने के लिए कुछ दिन की आवश्यकता है।

2

सीएसएलए के साथ टीडीडी के बारे में अधिक जानकारी this question के उत्तरों में मिल सकती है। खासकर this one

भी this question दिलचस्प हो सकता है।

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