Go में Test Coverage: कोड की गुणवत्ता मापना और बढ़ाना

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Go में test coverage कैसे मापें और परेशान न हों

\n\n

आपने अपने Go एप्लिकेशन के लिए टेस्ट लिखे हैं। खुद को सुपरहीरो समझ रहे हैं? सही कर रहे हैं। लेकिन एक बात है: टेस्ट कितने कोड को कवर करते हैं? इस सवाल के जवाब के बिना, आपका आत्मविश्वास सिर्फ अटकलें लगाने जैसा है।

\n\n

सवाल "How to measure test coverage in Go" Stack Overflow पर सबसे लोकप्रिय में से एक है (हजारों व्यूज)। और यह कोई संयोग नहीं है। डेवलपर्स सिर्फ टेस्ट लिखना नहीं चाहते, बल्कि यह समझना चाहते हैं कि वे कितने प्रभावी हैं। इस ट्यूटोरियल में हम Go में test coverage मापने के सभी तरीकों पर चर्चा करेंगे: बुनियादी कमांड से लेकर प्रोफाइल और HTML रिपोर्ट वाली उन्नत तकनीकों तक।

\n\n

test coverage क्या है और इसे क्यों मापें?

\n\n

Test coverage (कोड का टेस्ट कवरेज) एक मीट्रिक है जो दिखाता है कि टेस्ट के दौरान आपके सोर्स कोड का कितना प्रतिशत निष्पादित होता है। इसे प्रतिशत में व्यक्त किया जाता है। 100% coverage हमेशा पवित्र ग्रिल नहीं है, लेकिन उच्च आंकड़ों के लिए प्रयास करना उचित है।

\n\n

इसकी आवश्यकता क्यों है?

\n
    \n
  • गुणवत्ता नियंत्रण: आप देखते हैं कि कोड के कौन से हिस्से बिना टेस्ट के रह गए हैं
  • \n
  • रिफैक्टरिंग में विश्वास: उच्च कवरेज कुछ तोड़ने के जोखिम को कम करता है
  • \n
  • CI/CD मीट्रिक्स: आप coverage की सीमा निर्धारित कर सकते हैं और कम कवरेज वाले कोड को रोक सकते हैं
  • \n
  • दस्तावेज़ीकरण: टेस्ट जीवंत दस्तावेज़ हैं, और coverage दिखाता है कि यह कितना पूर्ण है
  • \n
\n\n

चेतावनी: coverage ≠ टेस्ट की गुणवत्ता

\n

याद रखें: 100% coverage बग की अनुपस्थिति की गारंटी नहीं देता। आप ऐसे टेस्ट लिख सकते हैं जो सिर्फ फंक्शन को कॉल करते हैं, लेकिन कुछ भी जांच नहीं करते। Coverage एक मात्रात्मक मीट्रिक है। टेस्ट की गुणवत्ता गुणात्मक है। दोनों दृष्टिकोणों का उपयोग करें।

\n\n

बुनियादी माप: go test -cover

\n\n

सबसे सरल से शुरू करते हैं। Go में go test टूल में ही coverage के लिए अंतर्निहित समर्थन है। आइए एक सरल प्रोजेक्ट बनाएं और देखें कि यह कैसे काम करता है।

\n\n

फ़ाइल math.go बनाएं:

\n\n
package main\n\nfunc Add(a, b int) int {\n    return a + b\n}\n\nfunc Subtract(a, b int) int {\n    return a - b\n}\n\nfunc Multiply(a, b int) int {\n    return a * b\n}\n\nfunc Divide(a, b int) (int, error) {\n    if b == 0 {\n        return 0, nil // त्रुटि: return 0, errors.New("division by zero") होना चाहिए\n    }\n    return a / b, nil\n}
\n\n

और अब — टेस्ट (math_test.go):

\n\n
package main\n\nimport "testing"\n\nfunc TestAdd(t *testing.T) {\n    result := Add(2, 3)\n    if result != 5 {\n        t.Errorf("expected 5, got %d", result)\n    }\n}\n\nfunc TestSubtract(t *testing.T) {\n    result := Subtract(10, 4)\n    if result != 6 {\n        t.Errorf("expected 6, got %d", result)\n    }\n}\n\n// जानबूझकर Multiply और Divide का परीक्षण नहीं कर रहे
\n\n

अब टेस्ट को -cover फ्लैग के साथ चलाएं:

\n\n
go test -cover
\n\n

आउटपुट कुछ इस प्रकार होगा:

\n\n
ok      example/math    0.002s  coverage: 50.0% of statements
\n\n

यह सही है — 50% कोड कवर हुआ, क्योंकि Multiply और Divide का परीक्षण नहीं किया गया। लेकिन यह सिर्फ एक सामान्य आंकड़ा है। क्या होगा अगर हम विस्तृत कवरेज प्रोफाइल देखना चाहते हैं?

\n\n

कवरेज प्रोफाइल: go test -coverprofile

\n\n

फ्लैग -coverprofile कवरेज की विस्तृत जानकारी एक फ़ाइल में सहेजता है:

\n\n
go test -coverprofile=coverage.out
\n\n

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

\n\n

HTML रिपोर्ट: go tool cover -html

\n\n

कवरेज विश्लेषण का सबसे सुविधाजनक तरीका HTML रिपोर्ट है। यह निष्पादित कोड को हरे रंग में और अनिष्पादित कोड को लाल रंग में हाइलाइट करता है।

\n\n
go tool cove                

ब्लॉग

पुस्तक अनुशंसाएँ