2008-10-28 17 views
12

एपीआई का परीक्षण करने के लिए सबसे अच्छा अभ्यास क्या है जो डेटाबेस से डेटा पर निर्भर करता है? निर्माण प्रक्रिया के हिस्से के रूप में यूनिट टेस्ट चलाने वाले "निरंतर एकीकरण" वातावरण में मुझे क्या समस्याएं देखने की आवश्यकता है? मेरा मतलब है कि आप बिल्ड स्क्रिप्ट के हिस्से के रूप में अपना डेटाबेस तैनात करेंगे (आपके इंस्टॉलर को चलाया जा सकता है) या क्या मुझे हार्डकोडेड डेटा के लिए जाना चाहिए [एक्सएमएल के साथ एमएसटीएस्ट डाटा ड्राइव यूनिट टेस्ट का उपयोग करें]?डेटा ड्राइव यूनिट टेस्ट

मुझे समझ में आता है कि मैं बिजनेस लॉजिक लेयर के लिए डेटा लेयर का नकल कर सकता हूं लेकिन अगर मुझे डीएएल में अपने एसक्यूएल स्टेटमेंट में समस्याएं थीं तो क्या होगा? मुझे डेटाबेस को हिट करने की ज़रूरत है, है ना?

अच्छा ... यह प्रश्नों का एक धार है:) ... विचार?

उत्तर

5

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

और निश्चित रूप से, कभी भी अपने लाइव डेटाबेस के खिलाफ परीक्षण न करें! लेकिन यह कहने के बिना चला जाता है :)

+0

तो आप सेटअप विधि में सभी डेटा को सरल बनाते हैं और डेटाबेस परीक्षण परीक्षण मामलों में पहले चरण के रूप में हाथ से तैयार एसक्यूएल निष्पादित करते हैं, है ना? – Kasper

+0

@ कैस्पर - यह मानता है कि आपके पास पहले से ही एक डेटाबेस है [आदर्श रूप से निर्माण से एसक्यूएल स्क्रिप्ट चलाकर] ... जब आपके पास बहुत से परीक्षण फिक्स्चर होते हैं, तो मुझे विश्वास है कि डेटाबेस को पहले डेटा डेटा सेट करना है । –

0

एक चीज जो मैंने किया वह स्थिर विधियां पैदा कर रही थी जो ज्ञात राज्य के परीक्षण डेटा लौटाती थीं। इसके बाद मैं इस डेटा को वापस करने के लिए "नकली" डीएएल का उपयोग करूंगा जैसे कि मैं वास्तव में डेटाबेस को कॉल कर रहा था। एसक्यूएल/संग्रहीत प्रक्रिया का परीक्षण करने के लिए, मैंने एसक्यूएल प्रबंधन स्टूडियो का उपयोग करके इसका परीक्षण किया। YMMV!

+0

क्या होगा यदि SQL गतिशील रूप से जेनरेट किया गया है - उदा। विभिन्न कहां खंड, इत्यादि? – andygeers

3

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

आप उपकरण (DBUnit, DBUnit.NET, अन्य) के साथ डेटाबेस को साफ़ और पॉप्युलेट कर सकते हैं या बस अपनी खुद की उपयोगिता कक्षाओं को एक ही काम करने के लिए बना सकते हैं।

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

5

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

+0

एंड्रयू, मुझे यकीन नहीं है ... क्या आप कह रहे हैं कि डीएएल इकाई परीक्षण नहीं किया जा सकता/नहीं बल्कि एकीकरण के दौरान परीक्षण किया जाना चाहिए? –

+0

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

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