मिनिटेस्ट क्या है?
Minitest एक रूबी टेस्टिंग लाइब्रेरी है , यह आपको अपने कोड TDD शैली के लिए परीक्षण लिखने की अनुमति देता है।
यह रेल और डीएचएच के पसंदीदा के लिए डिफ़ॉल्ट परीक्षण ढांचा है।
कुछ लोग इसे इसकी सादगी के लिए पसंद करते हैं और इसके मुख्य विकल्प (आरएसपीसी) की तुलना में इसका कोड कितना कम है।
जैसा कि आप इस चित्र में देख सकते हैं :
अब यह पोस्ट इस बारे में नहीं है कि आपको किसे चुनना चाहिए या कौन सा 'बेहतर' है।
यह पोस्ट इस बारे में है कि मिनीटेस्ट कैसे काम करता है ।
<ब्लॉकक्वॉट>यदि आप सोच रहे हैं:जो भी आपको सबसे अच्छा लगे उसका उपयोग करें, लेकिन फिर भी आपको दोनों से परिचित होना चाहिए 🙂
अगर आप यह जानना चाहते हैं कि चीजें कैसे काम करती हैं तो आपको यह पोस्ट पसंद आएगी…
कोई फर्क नहीं पड़ता कि कौन सी परीक्षण लाइब्रेरी आपकी पसंदीदा है!
चलो हुड के नीचे एक नज़र डालते हैं
लोगों द्वारा सुझाई गई चीजों में से एक (मेरे सहित) स्रोत कोड पढ़ना है क्योंकि यह सीखने का एक शानदार तरीका है कि चीजें कैसे काम करती हैं और यह कुछ नए रूबी ट्रिक्स को चुनने का एक शानदार तरीका है जो आपने पहले नहीं देखे होंगे।
मैंने मिनिटेस्ट के साथ यही किया है और मैंने जो सीखा है उसे आपके साथ साझा करने जा रहा हूं।
आइए कुछ वास्तविक परीक्षण कोड के साथ शुरू करें ताकि हम चर्चा कर सकें कि यह मिनिटेस्ट कैसे काम करता है से संबंधित है।
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 इन test_
को ढूंढता है विधियों, तो यह उन्हें कहते हैं।
यह lib/minitest/test.rb
में होता है फ़ाइल (और अधिक विशिष्ट होने के लिए, runnable_methods
. पर विधि, जो यादृच्छिक क्रम में विधियों की सूची भी लौटाती है)।
महत्वपूर्ण बिंदु :
यह काम करता है क्योंकि Minitest::Test
Runnable
. का उपवर्ग है ।
पहेली का अंतिम भाग है run
Runnable
. पर वर्ग विधि , जो कुछ अतिरिक्त फ़िल्टरिंग करता है और फिर run_one_method
. को कॉल करता है हर विधि के नाम और एक रिपोर्टर ऑब्जेक्ट के साथ।
यह रहा कोड :
filtered_methods.each do |method_name| run_one_method self, method_name, reporter end
और यह run
. को कॉल करना समाप्त करता है इंस्टेंस विधि Minitest::Test
. पर :
capture_exceptions do before_setup; setup; after_setup self.send self.name end
भेजें एक मेटाप्रोग्रामिंग विधि है जो आपको स्ट्रिंग या प्रतीक का उपयोग करके किसी भी ऑब्जेक्ट पर दूसरी विधि को कॉल करने देती है।
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
मैं इस तरह से कोड पढ़ना पसंद करता हूं, जो कोड आप पढ़ रहे हैं उसके एक पहलू या विशेषता पर ध्यान केंद्रित करें और फिर प्याज की तरह परतों को छीलते रहें।
यदि आप नहीं जानते कि इसका क्या अर्थ है, जैसे यह उपज कीवर्ड, तो इसे देखें।
यह सीखने की प्रक्रिया का हिस्सा है!
निष्कर्ष
इस पोस्ट में आपने सीखा कि कैसे Minitest आपके परीक्षण के तरीकों को खोजने और उन्हें कॉल करने के लिए मेटाप्रोग्रामिंग का उपयोग करता है। आपने यह भी सीखा कि रिपोर्टिंग के लिए परीक्षण त्रुटियों और अपवादों को एक सरणी में कैसे कैप्चर किया जाता है।
क्या आपको इस तरह के "कोड विश्लेषण" लेख पसंद हैं?
मुझे टिप्पणियों में बताएं 🙂
साथ ही इसे अपने पसंदीदा सामाजिक नेटवर्क पर साझा करना न भूलें और नीचे मेरे न्यूज़लेटर की सदस्यता लें यदि आप पहले से ही 7000+ रूबी डेवलपर्स का हिस्सा नहीं हैं जो अपने कौशल में सुधार करना चाहते हैं!