Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

Minitest को समझना: रूबी में यह कैसे काम करता है

Minitest क्या है?

Minitest एक रूबी टेस्टिंग लाइब्रेरी है, यह आपको TDD स्टाइल में अपने कोड के लिए टेस्ट लिखने की अनुमति देता है।

यह Rails के लिए डिफ़ॉल्ट टेस्टिंग फ्रेमवर्क है और DHH का पसंदीदा है।

कुछ लोग इसकी सादगी और इसके मुख्य विकल्प (RSpec) की तुलना में कितना कम कोड है, इसके लिए इसे पसंद करते हैं।

जैसा कि आप इस तस्वीर में देख सकते हैं:

Minitest को समझना: रूबी में यह कैसे काम करता है

अब यह पोस्ट इस बारे में नहीं है कि आपको कौन सा चुनना चाहिए या कौन सा 'बेहतर' है।

यह पोस्ट Minitest कैसे काम करता है के बारे में है।

यदि आप सोच रहे हैं: बस वही उपयोग करें जो आपको सबसे अच्छा लगे, लेकिन आपको दोनों से परिचित होना चाहिए 🙂

यदि आप सीखना पसंद करते हैं कि चीजें कैसे काम करती हैं तो आप इस पोस्ट का आनंद लेंगे…

चाहे आपकी पसंदीदा टेस्टिंग लाइब्रेरी कोई भी हो!

आइए हुड के नीचे देखें

लोग जो सलाह देते हैं उनमें से एक (मेरे सहित) है सोर्स कोड पढ़ना क्योंकि यह सीखने का एक शानदार तरीका है कि चीजें कैसे काम करती हैं और यह कुछ नई रूबी ट्रिक्स सीखने का भी एक शानदार तरीका है जो आपने पहले नहीं देखी होंगी।

मैंने Minitest के साथ यही किया और मैं आपके साथ शेयर करने जा रहा हूं कि मैंने क्या सीखा।

आइए कुछ वास्तविक टेस्ट कोड से शुरू करते हैं ताकि हम चर्चा कर सकें कि यह Minitest के काम करने के तरीके से कैसे संबंधित है।

 class Thingy < Minitest::Test def test_it_works assert_equal 1, 1 end end 

तो Minitest इन टेस्टिंग मेथड्स (जैसे test_it_works) को कैसे ढूंढता है और उन्हें चलाता है?

उत्तर थोड़े से मेटाप्रोग्रामिंग 'जादू' में है:

 def self.methods_matching(re) public_instance_methods(true).grep(re).map(&:to_s) end 

यह Runnable क्लास से आता है जिसे lib/minitest.rb में परिभाषित किया गया है। यह कोड वर्तमान क्लास के सभी इंस्टेंस मेथड्स को ढूंढता है और उन लोगों को चुनता है जो एक रेगुलर एक्सप्रेशन से मेल खाते हैं।

तो यदि आप methods_matching(/^test_/) कॉल करते हैं तो आपको उन सभी मेथड नामों की एक सरणी मिलेगी जो test_ से शुरू होते हैं।

Minitest कैसे काम करता है

Minitest इन test_ मेथड्स को ढूंढता है, फिर उन्हें कॉल करता है।

यह lib/minitest/test.rb फाइल में होता है (और अधिक विशिष्ट होने के लिए, runnable_methods मेथड पर, जो मेथड्स की सूची को रैंडम ऑर्डर में भी लौटाता है)।

महत्वपूर्ण बिंदु:
यह इसलिए काम करता है क्योंकि Minitest::Test, Runnable का सबक्लास है।

पहेली का अंतिम टुकड़ा Runnable पर run क्लास मेथड है, जो कुछ अतिरिक्त फ़िल्टरिंग करता है और फिर हर मेथड नाम और एक रिपोर्टर ऑब्जेक्ट के साथ run_one_method को कॉल करता है।

यहां कोड है:

 filtered_methods.each do |method_name| run_one_method self, method_name, reporter end 

और यह अंत में Minitest::Test पर run इंस्टेंस मेथड को कॉल करता है:

 capture_exceptions do before_setup; setup; after_setup self.send self.name end 

Send एक मेटाप्रोग्रामिंग मेथड है जो आपको स्ट्रिंग या सिंबल का उपयोग करके किसी भी ऑब्जेक्ट पर दूसरे मेथड को कॉल करने देता है।

capture_exceptions ब्लॉक का उपयोग टेस्ट विफलताओं और आपके कोड द्वारा उठाए गए एक्सेप्शन को रिकॉर्ड करने के लिए किया जाता है।

 def capture_exceptions # :nodoc: yield rescue *PASSTHROUGH_EXCEPTIONS raise rescue Assertion => e self.failures << e rescue Exception => e self.failures << UnexpectedError.new(e) end 

कोड पढ़ने का मेरा यही तरीका है, कोड के एक पहलू या सुविधा पर ध्यान केंद्रित करें जिसे आप पढ़ रहे हैं और फिर प्याज की तरह परतों को छीलते रहें।

यदि आप नहीं जानते कि कुछ का क्या अर्थ है, जैसे यह yield कीवर्ड, तो इसे देखें।

यह सीखने की प्रक्रिया का हिस्सा है!

निष्कर्ष

इस पोस्ट में आपने सीखा कि Minitest आपके टेस्ट मेथड्स को ढूंढने और उन्हें कॉल करने के लिए मेटाप्रोग्रामिंग का उपयोग कैसे करता है। आपने यह भी सीखा कि टेस्ट एरर्स और एक्सेप्शन को रिपोर्टिंग के लिए एक सरणी में कैसे कैप्चर किया जाता है।

क्या आपको इस तरह के "कोड विश्लेषण" लेख पसंद हैं?

मुझे कमेंट्स में बताएं 🙂

इसके अलावा इसे अपने पसंदीदा सोशल नेटवर्क पर शेयर करना न भूलें और यदि आप पहले से ही 7000+ रूबी डेवलपर्स का हिस्सा नहीं हैं जो अपने कौशल में सुधार करना चाहते हैं तो नीचे मेरे न्यूज़लेटर को सब्सक्राइब करें!


  1. मदरबोर्ड कैसे काम करता है मदरबोर्ड कैसे काम करता है

    आपने शायद मदरबोर्ड के बारे में सुना होगा और जानते होंगे कि यह क्या है, लेकिन क्या आप वास्तव में जानते हैं कि यह कैसे काम करता है? मदरबोर्ड को एक बड़ी कंपनी के मुख्यालय के रूप में सोचें। मुख्यालय के बिना, शेष कर्मचारियों को कार्य सौंपने वाला कौन है? और ठीक यही मदरबोर्ड के लिए है। यह एक कंप्यूटर का क

  1. रूबी में स्टैटिक एनालिसिस में महारत: पार्सर जेम के साथ मेथड्स और पैरामीटर्स निकालें रूबी में स्टैटिक एनालिसिस में महारत: पार्सर जेम के साथ मेथड्स और पैरामीटर्स निकालें

    मान लीजिए कि आप अपने सोर्स कोड को पार्स करके अपने सभी मेथड्स ढूंढना चाहते हैं, वे कहां परिभाषित हैं और वे कौन से तर्क लेते हैं। आप यह कैसे कर सकते हैं? आपका पहला विचार इसके लिए एक रेगेक्स लिखना हो सकता है… लेकिन क्या कोई बेहतर तरीका है? हाँ! स्टैटिक एनालिसिस एक तकनीक है जिसका उपयोग आप तब कर सकते है

  1. एक्सेल के डेटा एनालिसिस टूलपैक को केवल दो आसान चरणों में इंस्टॉल करें एक्सेल के डेटा एनालिसिस टूलपैक को केवल दो आसान चरणों में इंस्टॉल करें

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