कोटलिन में परीक्षण: फ्रेमवर्क और उपकरणों का पूर्ण अवलोकन
\n\nKotlin — एक ऐसी भाषा है जो बैकएंड डेवलपमेंट (Spring Boot, Ktor) और Android में तेजी से लोकप्रियता प्राप्त कर रही है। हालांकि, एक शक्तिशाली भाषा के लिए उपयुक्त परीक्षण उपकरणों की आवश्यकता होती है। इस लेख में, हम Kotlin अनुप्रयोगों के परीक्षण के लिए प्रमुख फ्रेमवर्क और लाइब्रेरीज़ पर चर्चा करेंगे: क्लासिक JUnit5 से लेकर आधुनिक Kotest और MockK तक। यह सामग्री शुरुआती और Java से आने वाले अनुभवी डेवलपर्स दोनों के लिए उपयोगी होगी।
\n\n1. JUnit5 — आधुनिक परीक्षण का आधार
\n\nJUnit5 (Jupiter) — Java/Kotlin में मॉड्यूलर परीक्षण के लिए डी-फैक्टो मानक है। Kotlin में इसका उपयोग छोटी लेकिन महत्वपूर्ण विशेषताओं के साथ किया जाता है।
\n\n- \n
- लैम्ब्डा और उच्च-क्रम फ़ंक्शन का समर्थन — परीक्षण अधिक संक्षिप्त रूप से लिखे जा सकते हैं। \n
- एनोटेशन —
@Test,@BeforeEach,@AfterAllJava की तरह काम करते हैं। \n - Assumptions और Assertions — अंतर्निहित जाँचें। \n
JUnit5 के साथ Kotlin में एक सरल परीक्षण का उदाहरण:
\n\nimport org.junit.jupiter.api.Assertions.assertEquals\nimport org.junit.jupiter.api.Test\n\nclass CalculatorTest {\n\n private val calculator = Calculator()\n\n @Test\n fun `addition of two numbers should return correct sum`() {\n val result = calculator.add(2, 3)\n assertEquals(5, result)\n }\n\n @Test\n fun `should throw exception when dividing by zero`() {\n assertThrows<IllegalArgumentException> {\n calculator.divide(10, 0)\n }\n }\n}\n\nमहत्वपूर्ण: Kotlin परीक्षण फ़ंक्शन नामों में रिक्त स्थान (बैकटिक्स) का उपयोग करने की अनुमति देता है, जो परीक्षण नामों को प्राकृतिक भाषा में पढ़ने योग्य बनाता है।
\n\n2. Kotest — मूल Kotlin फ्रेमवर्क
\n\nKotest (पूर्व में KotlinTest) — सबसे व्यापक और लचीला फ्रेमवर्क है, जो पूरी तरह से Kotlin में लिखा गया है। यह परीक्षण लिखने की कई शैलियाँ (स्ट्रिंग, स्पेसिफिकेशन, बिहेवियरल) और शक्तिशाली अंतर्निहित मैचर्स प्रदान करता है।
\n\nप्रमुख विशेषताएँ:
\n- \n
- प्रॉपर्टी-आधारित परीक्षण — परीक्षण डेटा का स्वचालित जनरेशन। \n
- डेटा-संचालित परीक्षण — इनपुट डेटा की तालिकाओं के साथ। \n
- शक्तिशाली assertion मैचर्स —
shouldBe,shouldContain,shouldThrowऔर अन्य। \n - Coroutines के लिए समर्थन — अंतर्निहित
testCoroutineScope। \n
"String Spec" शैली में परीक्षण का उदाहरण:
\n\nimport io.kotest.core.spec.style.StringSpec\nimport io.kotest.matchers.shouldBe\nimport io.kotest.matchers.shouldThrow\n\nclass UserServiceTest : StringSpec({\n\n val service = UserService()\n\n "should return user by id" {\n val user = service.getUser(1)\n user.name shouldBe "Alice"\n }\n\n "should throw exception for invalid id" {\n shouldThrow<NoSuchElementException> {\n service.getUser(-1)\n }\n }\n})\n\nKotest में प्रॉपर्टी-आधारित परीक्षण:
\n\nimport io.kotest.property.forAll\nimport io.kotest.property.arbitrary.int\n\nclass MathPropertiesTest : StringSpec({\n "addition is commutative" {\n forAll<Int, Int> { a, b ->\n (a + b) == (b + a)\n }\n }\n})\n\n3. MockK — Kotlin के लिए मॉक
\n\nMockito (जिसका भी उपयोग किया जा सकता है) के विपरीत, MockK Kotlin की विशेषताओं के लिए पूरी तरह से अनुकूलित है: यह sealed classes, object, extension functions और coroutines का समर्थन करता है।
मुख्य विशेषताएँ:
\n- \n
- मॉक और स्टब बनाने के लिए संक्षिप्त DSL। \n
- रिलैक्स-मॉक का समर्थन (अनचेक किए गए कॉल)। \n
- कॉल के क्रम और कॉल की संख्या का सत्यापन। \n
suspend-फ़ंक्शन के लिए मॉक।