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

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

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

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

परिचय: क्यों परीक्षण एक विश्वसनीय स्विफ्ट एप्लिकेशन की नींव है

\n\n

iOS और macOS के लिए विकास में कोड की उच्च विश्वसनीयता की आवश्यकता होती है। एप्लिकेशन के तर्क में एक त्रुटि उपयोगकर्ता अनुभव को खराब कर सकती है, और वाणिज्यिक परियोजनाओं में पैसे का नुकसान कर सकती है। स्विफ्ट में परीक्षण केवल "अच्छा व्यवहार" नहीं है, बल्कि विकास का एक अनिवार्य चरण है। यह प्रारंभिक चरणों में बग का पता लगाने, रिफैक्टरिंग को सरल बनाने और कोड की गुणवत्ता में सुधार करने की अनुमति देता है।

\n\n

इस लेख में, हम परीक्षण के तीन स्तरों पर चर्चा करेंगे: यूनिट (मॉड्यूलर), इंटीग्रेशन (एकीकरण) और ई2ई (एंड-टू-एंड)। आप जानेंगे कि वे कैसे भिन्न हैं, प्रत्येक का उपयोग कब करना है, और XCTest फ्रेमवर्क का उपयोग करके स्विफ्ट में कार्यशील उदाहरण देखेंगे।

\n\n

1. स्विफ्ट में यूनिट-टेस्टिंग: मूलभूत आधार

\n\n

यूनिट टेस्ट अलग-अलग मॉड्यूल (फंक्शन, मेथड, क्लास) को अलगाव में जांचते हैं। उनका मुख्य उद्देश्य यह सुनिश्चित करना है कि कोड की प्रत्येक "इकाई" सही ढंग से काम करती है।

\n\n

XCTest सेटअप

\n\n

XCTest Xcode में अंतर्निहित है। टेस्ट टार्गेट बनाने के लिए:

\n
    \n
  • Xcode में प्रोजेक्ट खोलें।
  • \n
  • File → New → Target चुनें।
  • \n
  • Unit Testing Bundle चुनें।
  • \n
\n\n

बनाने के बाद, आपको YourAppTests.swift जैसी फ़ाइल मिलेगी।

\n\n

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

\n\n

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

\n\n
func calculateDiscount(price: Double, discount: Double) -> Double {\n    guard discount >= 0 && discount <= 100 else { return price }\n    return price * (1 - discount / 100)\n}\n
\n\n

हम टेस्ट लिखते हैं:

\n\n
import XCTest\n@testable import YourApp\n\nclass DiscountTests: XCTestCase {\n    func testCalculateDiscount_ValidInput() {\n        let result = calculateDiscount(price: 1000, discount: 20)\n        XCTAssertEqual(result, 800, accuracy: 0.01)\n    }\n    \n    func testCalculateDiscount_InvalidDiscount() {\n        let result = calculateDiscount(price: 500, discount: 150)\n        XCTAssertEqual(result, 500)\n    }\n}\n
\n\n

यूनिट टेस्ट के लिए Best practices:

\n
    \n
  • एक टेस्ट — एक जाँच।
  • \n
  • सामान्य ऑब्जेक्ट को इनिशियलाइज़ करने के लिए setUp() का उपयोग करें।
  • \n
  • नेटवर्क, डीबी या UI पर निर्भरता से बचें — मॉक का उपयोग करें।
  • \n
\n\n

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

\n\n

इंटीग्रेशन टेस्ट जाँचते हैं कि विभिन्न मॉड्यूल एक साथ कैसे काम करते हैं। उदाहरण के लिए, डेटा मॉडल का नेटवर्क लेयर या CoreData डेटाबेस के साथ इंटरैक्शन।

\n\n

उदाहरण: नेटवर्क रिक्वेस्ट का परीक्षण

\n\n

हम एक सरल सेवा बनाते हैं:

\n\n
class NetworkService {\n    func fetchUser(completion: @escaping (Result<User, Error>) -> Void) {\n        // वास्तविक API अनुरोध\n    }\n}\n
\n\n

एक इंटीग्रेशन टेस्ट यह जाँच सकता है कि सेवा वास्तविक सर्वर (या स्थानीय mock-सर्वर) से प्रतिक्रिया को सही ढंग से संसाधित करती है:

\n\n
class NetworkServiceIntegrationTests: XCTestCase {\n    var service: NetworkService!\n    \n    override func setUp() {\n        super.setUp()\n        service = NetworkService()\n    }\n    \n    func testFetchUser_ReturnsUser() {\n        let expectation = self.expectation(description: "Fetch user")\n        \n        service.fetchUser { result in\n            switch result {\n            case .success(let user):\n                XCTAssertNotNil(user.name)\n            case .failure:\n                XCTFail("Request failed")\n            }\n            expectation.fulfill()\n        }\n        \n        waitForExpectations(timeout: 5)\n    }\n}\n
\n\n

महत्वपूर्ण: इंटीग्रेशन टेस्ट यूनिट टेस्ट की तुलना में धीमे होते हैं, इसलिए इन्हें कम बार चलाया जाता है (उदाहरण के लिए, main में मर्ज करने से पहले)।

\n\n

3. XCUITest के साथ E2E-परीक्षण (एंड-टू-एंड)

\n\n

E2E-टेस्ट (End-to-End) उपयोगकर्ता की क्रियाओं का अनुकरण करते हैं: बटन दबाना, टेक्स्ट इनपुट करना, UI प्रदर्शन की जाँच करना। स्विफ्ट में इसके लिए

ब्लॉग

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