मैं इकाई परीक्षण दृढ़ता कैसे करूँ?

परीक्षण संचालित विकास का अभ्यास करने में एक नौसिखिया के रूप में, मैं अक्सर एक विवाद में समाप्त होता हूं कि एक डेटाबेस में यूनिट परीक्षण निरंतरता कैसे करें।

मुझे पता है कि तकनीकी रूप से यह एकीकरण परीक्षण होगा (यूनिट परीक्षण नहीं), लेकिन मैं निम्नलिखित के लिए सर्वोत्तम रणनीतियां जानना चाहता हूं:

  1. परीक्षण प्रश्न।
  2. आवेषण परीक्षण। मुझे कैसे पता चलेगा कि अगर यह विफल हो जाता है तो वह गलत हो गया है? मैं इसे सम्मिलित करके और फिर पूछताछ करके परीक्षण कर सकता हूं, लेकिन मुझे कैसे पता चलेगा कि क्वेरी गलत नहीं थी?
  3. परीक्षण और हटाए गए परीक्षण - आवेषण परीक्षण के समान

इन करने के लिए सबसे अच्छा अभ्यास क्या हैं?


एसक्यूएल परीक्षण के बारे में: मुझे पता है कि यह किया जा सकता है, लेकिन अगर मैं एन / आर मैपर जैसे एनएचबीर्नेट का उपयोग करता हूं, तो यह आउटपुट प्रश्नों के लिए इस्तेमाल किए गए उपनामों में कुछ नामकरण मौसा लगाता है, और जैसा कि कुछ हद तक अप्रत्याशित है, मुझे यकीन नहीं है मैं इसके लिए परीक्षण कर सकता था।

क्या मुझे बस सब कुछ छोड़ देना चाहिए और एनएचबीर्नेट पर भरोसा करना चाहिए? मुझे यकीन नहीं है कि समझदार है।

0
जोड़ा संपादित
विचारों: 3

10 उत्तर

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

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

0
जोड़ा

तकनीकी रूप से दृढ़ता के यूनिट परीक्षण यूनिट परीक्षण नहीं होते हैं, वे एकीकरण परीक्षण होते हैं।

एमबीयूनीट का उपयोग कर सी # के साथ, आप बस SqlRestoreInfo और रोलबैक विशेषताओं का उपयोग करते हैं

    [TestFixture]
    [SqlRestoreInfo(, ,]
    public class Tests
    {

        [SetUp]
        public void Setup()
        {

        }

        [Test]
        [RollBack]
        public void TEST()
        {
           //test insert. 
        }
    }

एनयूनीट में भी ऐसा किया जा सकता है, गुणों का नाम थोड़ा सा भिन्न होता है।

यह जांचने के लिए कि क्या आपकी क्वेरी सफल हुई है, आपको आमतौर पर दूसरी क्वेरी के साथ इसका पालन करने की आवश्यकता है ताकि यह देखने के लिए कि डेटाबेस को बदल दिया गया है या नहीं।

0
जोड़ा

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

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

0
जोड़ा

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

0
जोड़ा

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

0
जोड़ा

मैंने इकाई परीक्षण से संबंधित एक पोस्ट यहां लिखा है डेटा परत जो इस सटीक समस्या को शामिल करता है। (शर्मनाक) प्लग के लिए माफ़ी, लेकिन लेख यहां पोस्ट करने के लिए बहुत लंबा है।

मुझे उम्मीद है कि आपकी मदद करता है - यह पिछले 6 महीनों में 3 सक्रिय परियोजनाओं पर मेरे लिए बहुत अच्छा काम करता है।

सादर,

रॉब जी

0
जोड़ा

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

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

जेडीबीसी आधारित परियोजनाओं के लिए, एकोलिट फ्रेमवर्क का उपयोग किया जा सकता है: http://acolyte.eu.org । यह एक विशिष्ट परीक्षण डीबी का प्रबंधन किए बिना, जेडीबीसी अबास्ट्रक्शन से लाभान्वित, डेटा परीक्षण को नकल करने की अनुमति देता है, जिसे आप परीक्षण करना चाहते हैं।

0
जोड़ा

मैं आमतौर पर एक संग्रह बनाते हैं और अपनी इकाई को बचाने के लिए इसका उपयोग करते हैं, फिर एक ताजा पुनर्प्राप्त करें। तब मैं जोर देता हूं कि पुनर्प्राप्त सहेजे गए के बराबर है।

0
जोड़ा

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

DbUnit (जावा)

DbUnit.NET

0
जोड़ा