कोटलिन में कोड कवरेज: शाम को 0 से 80% तक

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

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

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

प्रस्तावना: 'हरे' टेस्ट क्यों एक भ्रम हैं?

\n\n

आप टेस्ट चलाते हैं, मनचाही हरी पट्टी देखते हैं और खुद को सुपरहीरो समझने लगते हैं। लेकिन क्या होगा अगर मैं कहूँ कि आपके टेस्ट बेकार हो सकते हैं? कि वे दस में से केवल एक पंक्ति की जाँच करते हैं, और बाकी नौ पंक्तियाँ एक 'मृत क्षेत्र' हैं जहाँ बग रहते हैं? यहीं पर कोड कवरेज (code coverage) मंच पर आता है। यह सिर्फ रिपोर्ट के लिए संख्याएँ नहीं है, बल्कि आपका निजी रडार है जो दिखाता है कि टेस्ट आपके कोटलिन कोड को कितनी अच्छी तरह 'कवर' करते हैं।

\n\n

इस लेख में, हम समझेंगे कि कैसे कोटलिन में कोड कवरेज को एक उबाऊ मीट्रिक से एक शक्तिशाली उपकरण में बदला जाए। आप जानेंगे कि कौन से उपकरण वास्तव में काम करते हैं, प्रतिशत का क्या मतलब है, और '100% कवरेज' के जाल में कैसे न फँसें। चलिए शुरू करते हैं!

\n\n

कोड कवरेज क्या है और यह कोटलिन के लिए क्यों महत्वपूर्ण है?

\n\n

कल्पना करें कि आपका कोड एक गोल्फ का मैदान है, और टेस्ट खिलाड़ी हैं। कोड कवरेज एक नक्शा है जो दिखाता है कि खिलाड़ी मैदान के किन-किन हिस्सों से गुज़रे। यदि खिलाड़ी किसी खतरनाक बंकर (जटिल एल्गोरिदम) से बचते हैं, तो आपको इसके बारे में पता चल जाएगा।

\n\n

कोटलिन की दुनिया में, जहाँ हम अक्सर coroutines, sealed क्लासेज़ और extension-फ़ंक्शन का उपयोग करते हैं, सरल टेस्ट आसानी से तर्क की पूरी शाखाओं को छोड़ सकते हैं। कवरेज मीट्रिक्स तीन सवालों के जवाब देने में मदद करते हैं:

\n
    \n
  • टेस्ट के दौरान कोड की कितने प्रतिशत पंक्तियाँ निष्पादित हुईं?
  • \n
  • किन शर्तों (if/else, when) की जाँच की गई?
  • \n
  • कौन से फ़ंक्शन अनदेखे रह गए?
  • \n
\n\n

इन मीट्रिक्स के बिना, आप ऐसा कोड प्रोडक्शन में भेजने का जोखिम उठाते हैं जो 'केवल सोमवार को' काम करता है।

\n\n

कोटलिन में कवरेज मापने के उपकरण: टॉप-3

\n\n

कोटलिन इकोसिस्टम में तीन मुख्य उपकरण हैं जो code coverage मापने में आपकी मदद करेंगे। आइए प्रत्येक से परिचित हों।

\n\n

1. JaCoCo (Java Code Coverage) — अनुभवी

\n

सबसे लोकप्रिय उपकरण। यह बाइट-कोड स्तर पर काम करता है, इसलिए Java और Kotlin दोनों के लिए उपयुक्त है। इसका मुख्य लाभ समृद्ध आँकड़े और CI/CD के साथ एकीकरण है।

\n\n

Gradle (Kotlin DSL) में कैसे जोड़ें:

\n
plugins {\n    id("jacoco")\n}\n\ntasks.jacocoTestReport {\n    dependsOn(tasks.test) // रिपोर्ट से पहले टेस्ट चलाएँ\n    reports {\n        xml.required.set(true)\n        html.required.set(true) // सुंदर HTML रिपोर्ट जनरेट करें\n    }\n}
\n\n

./gradlew jacocoTestReport चलाने के बाद, आपको एक HTML फ़ाइल मिलेगी जहाँ अनकवर्ड पंक्तियाँ लाल रंग में हाइलाइट होंगी। सुविधाजनक है, है ना?

\n\n

2. Kover — आधुनिक खिलाड़ी

\n

विशेष रूप से Kotlin के लिए डिज़ाइन किया गया। JaCoCo के विपरीत, Kover AST (अमूर्त सिंटैक्स ट्री) स्तर पर काम करता है, जो इसे Kotlin-विशिष्ट निर्माणों (जैसे inline-फ़ंक्शन) के लिए अधिक सटीक बनाता है।

\n\n

Kover को जोड़ना:

\n
plugins {\n    id("org.jetbrains.kotlinx.kover") version "0.7.3"\n}\n\nkover {\n    excludeSourceSets {\n        names("test") // रिपोर्ट से टेस्ट को ही बाहर करें\n    }\n}
\n\n

Kover HTML, XML और GitHub के लिए बैज के रूप में रिपोर्ट जनरेट करता है। यह शुद्ध Kotlin प्रोजेक्ट के लिए आदर्श विकल्प है।

\n\n

3. IntelliJ IDEA Coverage — त्वरित जाँच के लिए

\n

अंतर्निहित उपकरण। आप कवरेज के साथ टेस्ट चलाते हैं (हरा 'Run with Coverage' आइकन) और IDE में ही रंगीन कोड देखते हैं। स्थानीय विकास के लिए सुविधाजनक, लेकिन CI के लिए नहीं।

\n\n

सुझाव: त्वरित पुनरावृत्ति के लिए IntelliJ का उपयोग करें, और अंतिम रिपोर्ट के लिए JaCoCo या Kover का।

\n\n

कोड कवरेज मीट्रिक्स: इन प्रतिशतों का क्या मतलब है?

\n\n

जब आप '80% कवरेज' देखते हैं, तो यह अच्छा लगता है। लेकिन 80% किसका? आइए मुख्य मीट्रिक्स को समझें जो सभी उपकरण देते हैं।

\n\n

Line Coverage (पंक्ति कवरेज)

\n

सबसे सरल मीट्रिक। स्रोत कोड की कितनी पंक्तियाँ टेस्ट द्वारा छुई गईं। यदि कोई पंक्ति एक बार भी निष्पादित नहीं हुई, तो वह अनकवर्ड मानी जाती है।

\n

उदाहरण:

\n
fun process(value: Int): String {\n    if (                

ब्लॉग

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