2012-05-26 15 views
7

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

क्या यूनिट परीक्षण के लिए मानक विधि/प्रक्रिया है जहां परीक्षण करने के लिए डेटाबेस पहुंच (पढ़ना और लिखना) आवश्यक है?

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

क्या मैं बंद हूं? या इसके लिए एक बेहतर तरीका है?

+0

इस ब्लॉग पोस्ट में मैंने गो भाषा का उपयोग करके परीक्षण डेटाबेस भरने के लिए परीक्षण/उत्पादन डेटाबेस और फिक्स्चर का एक उदाहरण दिखाया है: https://automationangels.wordpress.com/2015/09/11/fixtures-propagating-test- डेटाबेस-के-यूनिट-परीक्षण-इन-गो/एक नज़र डालें, यह उपयोगी हो सकता है। – WhiteAngel

उत्तर

10

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

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

+0

हाय ओलेस्की, धन्यवाद। यह समझ में आता है, हालांकि मेरी स्थिति में ऐप डेटाबेस के साथ कसकर जोड़ता है। यह एक कस्टम ईकॉमर्स शॉपिंग कार्ट है। ऐसी कई स्थितियां हैं जिनके लिए डेटाबेस पहुंच की आवश्यकता होती है, उदाहरण के लिए खरीदारी में कोई आइटम जोड़ना आवश्यक है कि यह डेटाबेस आदि में संग्रहीत है। इसलिए मुझे यकीन नहीं है कि –

+3

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

3

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

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

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

+1

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

+1

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

+1

मैं मानता हूं कि सम्मेलन ऐसा लगता है कि एक यूनिट-टेस्ट को एक प्रक्रिया के भीतर सामान का परीक्षण करना चाहिए; एक वर्ग स्तर पर परीक्षण ऑब्जेक्ट उन्मुख भाषाओं के लिए सम्मेलन प्रतीत होता है। इकाई परीक्षण जो अकादमिक रूप से परिभाषित किया गया है, वह लक्ष्य रखने के लिए एक अच्छी चीज जैसा प्रतीत होता है, लेकिन अगर यूनिट परीक्षणों को लिखना और बनाए रखना उनके द्वारा दिए गए लाभों की तुलना में बहुत अधिक समय लेता है, तो बेहतर संतुलन की आवश्यकता होती है। और मैं यूनिट-टेस्ट की परिभाषा को आराम करने के लिए तैयार हूं। :) –

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