Kotlin में परीक्षण: यूनिट, इंटीग्रेशन, E2E शुरू से अंत तक

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

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

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

Kotlin में परीक्षण: यूनिट, इंटीग्रेशन, E2E शुरू से अंत तक

\n\n

Kotlin में आधुनिक विकास के लिए परीक्षण के लिए एक व्यवस्थित दृष्टिकोण की आवश्यकता होती है। चाहे आप Ktor पर बैकएंड लिख रहे हों या Android के लिए मोबाइल एप्लिकेशन, परीक्षणों के साथ गुणवत्तापूर्ण कोड कवरेज परियोजना की स्थिरता और पूर्वानुमान की कुंजी है। इस लेख में, हम परीक्षण के तीन स्तरों को कवर करेंगे: मॉड्यूलर (यूनिट), इंटीग्रेशन और एंड-टू-एंड (E2E) परीक्षण। आप सीखेंगे कि किन उपकरणों का उपयोग करना है, Kotlin में प्रभावी परीक्षण कैसे लिखना है और सामान्य गलतियों से कैसे बचना है।

\n\n

1. Kotlin में यूनिट-परीक्षण: मूलभूत आधार

\n\n

यूनिट-टेस्ट बाहरी निर्भरताओं से अलग करके व्यक्तिगत फ़ंक्शन, क्लास या विधियों के काम की जाँच करते हैं। Kotlin में, इसके लिए अक्सर JUnit 5 फ्रेमवर्क का उपयोग मॉक लाइब्रेरी MockK के साथ किया जाता है।

\n\n

प्रोजेक्ट सेटअप

\n\n

build.gradle.kts में निर्भरताएँ जोड़ें:

\n\n
dependencies {\n    testImplementation("org.junit.jupiter:junit-jupiter:5.10.0")\n    testImplementation("io.mockk:mockk:1.13.8")\n}\n
\n\n

यूनिट-टेस्ट का उदाहरण

\n\n

मान लीजिए कि हमारे पास छूट की गणना के लिए एक सरल सेवा है:

\n\n
class DiscountService {\n    fun applyDiscount(price: Double, discountPercent: Int): Double {\n        require(discountPercent in 0..100) { "छूट प्रतिशत 0 से 100 के बीच होना चाहिए" }\n        return price * (100 - discountPercent) / 100\n    }\n}\n
\n\n

इस सेवा के लिए परीक्षण:

\n\n
import org.junit.jupiter.api.Assertions.*\nimport org.junit.jupiter.api.Test\nimport org.junit.jupiter.api.assertThrows\n\nclass DiscountServiceTest {\n\n    private val service = DiscountService()\n\n    @Test\n    fun `applyDiscount 50 प्रतिशत छूट की सही गणना करता है`() {\n        val result = service.applyDiscount(1000.0, 50)\n        assertEquals(500.0, result, 0.001)\n    }\n\n    @Test\n    fun `applyDiscount गलत प्रतिशत पर अपवाद फेंकता है`() {\n        assertThrows<IllegalArgumentException> {\n            service.applyDiscount(100.0, 150)\n        }\n    }\n}\n
\n\n

सुझाव: अपवादों की जाँच के लिए assertThrows का उपयोग करें और परीक्षणों को स्पष्ट स्ट्रिंग से नाम दें - इससे रिपोर्ट की पठनीयता में सुधार होता है।

\n\n

MockK के साथ मॉकिंग

\n\n

जब आपकी क्लास अन्य घटकों (जैसे, रिपॉजिटरी या API) पर निर्भर करती है, तो मॉक का उपयोग करें:

\n\n
class OrderService(private val paymentGateway: PaymentGateway) {\n    fun processOrder(amount: Double): String {\n        if (paymentGateway.charge(amount)) {\n            return "सफलतापूर्वक भुगतान किया गया"\n        }\n        return "भुगतान में त्रुटि"\n    }\n}\n\n// परीक्षण\n@Test\nfun `processOrder सफल भुगतान पर सफलता लौटाता है`() {\n    val mockGateway = mockk<PaymentGateway>()\n    every { mockGateway.charge(any()) } returns true\n\n    val service = OrderService(mockGateway)\n    val result = service.processOrder(500.0)\n\n    assertEquals("सफलतापूर्वक भुगतान किया गया", result)\n    verify { mockGateway.charge(500.0) }\n}\n
\n\n

2. इंटीग्रेशन परीक्षण: घटकों के बीच बातचीत की जाँच

\n\n

इंटीग्रेशन टेस्ट जाँचते हैं कि सिस्टम के विभिन्न भाग एक साथ कैसे काम करते हैं: डेटाबेस, बाहरी API, फ़ाइल सिस्टम। Kotlin के लिए, Testcontainers एकदम सही है - परीक्षणों के दौरान Docker कंटेनर चलाने के लिए एक लाइब्रेरी।

\n\n

PostgreSQL डेटाबेस के साथ उदाहरण

\n\n

निर्भरताएँ जोड़ें:

\n\n
testImplementation("org.testcontainers:testcontainers:1.19.3")\ntestImplementation("org.testcontainers:postgresql:1.19.3")\n
\n\n

DAO-लेयर के लिए एक परीक्षण लिखें:

\n\n
class UserRepositoryIntegrationTest {\n\n    companion object {\n        private val postgres = PostgreSQLContainer<Nothing>("postgres:15").apply {\n            withDatabaseName("testdb")\n            withUsername("test")\n            withPassword("test")\n            start()\n                

ब्लॉग

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