2008-08-05 18 views
11

क्या किसी के पास डेटाबेस-बैकएंड विकास के लिए टेस्ट कोड लिखने के लिए कुछ अच्छे संकेत हैं जहां राज्य पर भारी निर्भरता है?वेब कोड का परीक्षण कैसे करें?

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

क्या लोग आम तौर पर 'जमे हुए' डेटाबेस के साथ एक अलग विकास प्रणाली बनाते हैं ताकि किसी भी दिए गए फ़ंक्शन को हमेशा एक ही परिणाम सेट को वापस कर देना चाहिए?

मुझे पूरा यकीन है कि यह एक नया मुद्दा नहीं है, इसलिए मुझे अन्य लोगों के अनुभव से सीखने में बहुत दिलचस्पी होगी।

क्या वहां अच्छे लेख हैं जो सामान्य रूप से वेब-आधारित विकास के इस मुद्दे पर चर्चा करते हैं?

मैं आमतौर पर PHP कोड लिखता हूं, लेकिन मुझे उम्मीद है कि ये सभी मुद्दे काफी हद तक भाषा और ढांचे अज्ञेयवादी हैं।

उत्तर

5

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

अपडेट: एक त्वरित Google खोज ने PHPUnit के लिए DB unit extension दिखाया।

+0

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

1

मुझे अपने काम के साथ एक ही समस्या है और मुझे लगता है कि डेटाबेस को दोबारा बनाने के लिए एक PHP स्क्रिप्ट होना और फिर एक अलग स्क्रिप्ट है जहां मैं इसे पागल डेटा फेंक देता हूं यह देखने के लिए कि क्या यह टूट जाता है ।

मैंने कभी भी यूनिट परीक्षण का उपयोग नहीं किया है या ऐसा नहीं कह सकता है कि यह काम करता है या खेद नहीं है।

1

यदि आप परीक्षण चलाने से पहले ज्ञात मात्रा के साथ डेटाबेस सेट कर सकते हैं और अंत में फाड़ सकते हैं, तो आपको पता चलेगा कि आप किस डेटा के साथ काम कर रहे हैं।

फिर आप अपने यूआई से आसानी से परीक्षण करने के लिए सेलेनियम जैसे कुछ का उपयोग कर सकते हैं (यहां वेब-आधारित मानते हैं, लेकिन अन्य UI-flavors के लिए वहां बहुत सारे यूआई परीक्षण उपकरण हैं) और कुछ रिकॉर्ड्स की उपस्थिति का पता लगाया गया है डेटाबेस से

यह निश्चित रूप से डेटाबेस का एक परीक्षण संस्करण स्थापित करने के लायक है - या परीक्षणों के हिस्से के रूप में ज्ञात डेटा के साथ अपनी टेस्ट स्क्रिप्ट डेटाबेस को पॉप्युलेट करें।

3

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

1

आप http://selenium.openqa.org/ कोशिश कर सकते हैं यह डेटा परत परीक्षण अनुप्रयोग की बजाय जीयूआई परीक्षण के लिए अधिक है लेकिन करता है अपने कार्यों को रिकॉर्ड करें जिन्हें फिर विभिन्न प्लेटफॉर्म पर परीक्षण स्वचालित करने के लिए खेला जा सकता है।

2

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

फिर आप इस विश्वसनीय, दोहराने योग्य डेटा का उपयोग करने के लिए अपने यूनिट परीक्षण लिख सकते हैं।

चीजों के वेब पक्ष का परीक्षण करने के लिए, मैं वर्तमान में सेलेनियम (selenium.openqa.org) में देख रहा हूं। यह एक क्रॉस-ब्राउज़र सक्षम परीक्षण सूट प्रतीत होता है जो आपको कार्यक्षमता का परीक्षण करने में मदद करेगा। हालांकि, इन सभी वेब साइट टेस्ट टूल्स के साथ, यह जांचने का कोई वास्तविक तरीका नहीं है कि इन चीजों को कितनी अच्छी तरह से देखें, सभी ब्राउज़रों में उन पर एक मानव आंख डाले बिना!

मैं एक विधि है जो किसी विशिष्ट डीएओ वर्ग के लिए यूनिट टेस्ट के सभी से पहले चलाता है:

1

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

1

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

एक तरह से डेटाबेस कोड का परीक्षण करने के लिए है:

  1. में कुछ पंक्तियां सम्मिलित करें (एसक्यूएल का प्रयोग करके) राज्य
  2. प्रारंभ करने में भागो समारोह आप परीक्षण करना
  3. वास्तविक परिणाम के साथ की उम्मीद की तुलना चाहते हैं। यहाँ आप अपने सामान्य इकाई परीक्षण रूपरेखा
  4. साफ अप पंक्तियों को बदल रहे थे (ताकि अगले रन पिछले रन नहीं देखेंगे)

सफाई एक मानक तरीके से किया जा सकता है (बेशक इस्तेमाल कर सकते हैं , केवल परीक्षण डेटाबेस में) DELETE * FROM table के साथ।

1

आम तौर पर मैं पीटर से सहमत हूं लेकिन परीक्षण डेटा बनाने और हटाने के लिए मैं सीधे एसक्यूएल का उपयोग नहीं करता। मैं कुछ सीआरयूडी एपीआई का उपयोग करना पसंद करता हूं जो उत्पाद के रूप में डेटा को यथासंभव उत्पादन के समान बनाने के लिए उपयोग किया जाता है ...

2

हम एक इन-मेमोरी डेटाबेस (hsql: http://hsqldb.org/) का उपयोग करते हैं। हाइबरनेट (http://www.hibernate.org/) हमारे यूनिट परीक्षणों को परीक्षण डीबी पर इंगित करना आसान बनाता है, जो अतिरिक्त बोनस के साथ बिजली के रूप में चलाए जाते हैं ..

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