वेब कोड का परीक्षण कैसे करें?

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

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

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

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

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

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

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

10 उत्तर

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

0
जोड़ा

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

अपडेट करें: एक त्वरित Google खोज ने एक डीबी इकाई एक्सटेंशन दिखाया PHPUnit के लिए

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

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

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

0
जोड़ा

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

0
जोड़ा

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

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

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

0
जोड़ा

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

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

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

0
जोड़ा

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

0
जोड़ा

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

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

0
जोड़ा

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

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

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

क्लीनअप को मानक कोड (निश्चित रूप से, केवल परीक्षण डेटाबेस में) DELETE * तालिका से के साथ किया जा सकता है।

0
जोड़ा

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

0
जोड़ा