Go ट्रैक पर टेस्टिंग

Exercism पर अपने Go अभ्यास टेस्ट करना सीखिए


अपनी exercism प्रोजेक्ट डायरेक्टरी के अंदर मौजूद Go अभ्यासों को चलाने के लिए अभ्यास की डायरेक्टरी में जाइए और go test चलाइए।

cd exercism/project/directory/go/leap
go test

डेटा रेस डिटेक्टर के साथ टेस्ट

go test चलाने के अलावा, कुछ अभ्यासों को डेटा रेस डिटेक्टर के फ्लैग के साथ चलाना चाहिए। इससे पता चलता है कि आपके हल में डेटा रेस की गड़बड़ियाँ नहीं आ रही हैं।

संबंधित अभ्यासों में आपको यह याद दिलाने वाला संदेश मिलेगा कि टेस्ट डेटा रेस डिटेक्टर के फ्लैग -race के साथ चलाइए। डेटा रेस की जाँच के लिए go test -race चलाइए। उदाहरण के लिए:

cd exercism/project/directory/go/bank-account
go test -race

बेंचमार्क चलाना

अधिकतर अभ्यासों में बेंचमार्क होते हैं, जिनकी मदद से आप यह देख सकते हैं कि आपके हल में किए गए बदलाव उसकी परफॉर्मेंस को कैसे प्रभावित करते हैं। किसी अभ्यास के बेंचमार्क चलाने के लिए अभ्यास की डायरेक्टरी में जाकर go test -v --bench . --benchmem कमांड चलाइए।

इस आउटपुट पर ध्यान दीजिए।

BenchmarkReverse-16       403594              2537 ns/op             176 B/op         34 allocs/op

इसका मतलब है कि भरोसेमंद ढंग से समय मापने के लिए बेंचमार्क में 403594 इटरेशन चले। औसत गति 2537 ns प्रति लूप रही। हर ऑपरेशन में 34 मेमोरी एलोकेशन हुए, जिनका औसत 176 बाइट रहा।

टेस्ट करने योग्य उदाहरण

कुछ अभ्यासों में उदाहरण टेस्ट इस्तेमाल होते हैं और ये अभ्यास के मानक टेस्ट के साथ-साथ चलते हैं। इन उदाहरणों का इस्तेमाल अभ्यास के API का दस्तावेज़ बनाने और उसे जाँचने के लिए किया जाता है। ये यह पता लगाने में भी काम आते हैं कि अभ्यास का अपेक्षित API क्या है।

Go fmt

सबमिट करने से पहले कृपया अपने कोड पर go fmt चलाइए।

संकेत और सुझाव

अभ्यास की कोडिंग

हर अभ्यास का README.md एक सामान्य विवरण देता है, लेकिन Go का टेस्ट प्रोग्राम बहुत सटीक होता है। टेस्ट प्रोग्राम खोलिए और उस पर जल्दी से एक नज़र डालिए। अगर यह धोखा लगे, तो भी देखिए। इसमें काम के कमेंट, टेस्ट डेटा और टेस्ट फंक्शनों के नाम ढूँढिए। कुछ भी लिखने से पहले go test चलाकर देखिए। देखिए कि एरर संदेशों से यह समझ आता है कि शुरू कहाँ से करना है।

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

ठीक करना

टेस्ट अक्सर पहली एरर पर ही रुक जाते हैं। उस एक को ठीक कीजिए, और यही दोहराइए जब तक कोई एरर न बचे। go test में काम के ऑप्शन होते हैं। go test -v ज़्यादा विस्तृत आउटपुट देता है। go test -run <regexp> सिर्फ उन्हीं टेस्ट को चलाता है जिनके नाम <regexp> से मेल खाते हैं।

पैनिक से बहुत सारा आउटपुट आता है। शुरू में यह डरावना लग सकता है, लेकिन हिम्मत कीजिए। पैनिक संदेश के लिए पैनिक आउटपुट में सबसे ऊपर देखिए। उससे समस्या का सामान्य विवरण मिल जाएगा। फिर बाकी आउटपुट पढ़ते जाइए और देखिए कि आपके कोड का पहला उल्लेख कहाँ है। यह अक्सर सीधे समस्या की ओर इशारा कर देता है।

कंकरेंट प्रोग्रामों की समस्याएँ ढूँढने के लिए go test -race आज़माइए।

अपने कोड की सफाई

एक बार फिर कहते हैं, go fmt चलाइए। Golint आपके कोड में ऐसी स्टाइल समस्याओं के बारे में बता सकता है जिन्हें go fmt नहीं पकड़ता। आप go vet भी देख सकते हैं, जो आपके कोड में संभावित समस्याओं की चेतावनी देता है। कोड रिव्यू के आम कमेंट पढ़िए और उनका पालन कीजिए। जिस अभ्यास में कंकरेंसी शामिल हो, वहाँ टेस्ट पास हो जाने पर भी go test -race आज़माइए। बेंचमार्क परफॉर्मेंस के लिए ऑप्टिमाइज़ करते समय भी यह ध्यान रखिए कि कोड पढ़ने में आसान रहे। कभी-कभी ऑप्टिमाइज़ेशन से आपको संक्षिप्त और पढ़ने में आसान हल मिलते हैं, लेकिन परफॉर्मेंस के पीछे भागते हुए कोड पढ़ने में आसान बनाए रखना छोड़ देने का मन भी करता है।

बोनस टेस्ट

कुछ अभ्यासों में बोनस टेस्ट होते हैं जो सिर्फ go test से नहीं चलते। अगर आप सामान्य अभ्यास के साथ-साथ बोनस अभ्यास भी हल कर रहे हैं, तो आपको go test -tags bonus टाइप करना पड़ेगा, या टेस्ट प्रोग्राम के दस्तावेज़ में बताया गया कोई मिलता-जुलता कमांड चलाना पड़ेगा।