प्रॉपर्टी-आधारित परीक्षण Swift में: उन बग्स को पकड़ें जिनकी आपने तलाश नहीं की

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

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

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

Swift में प्रॉपर्टी-आधारित परीक्षण: जब सामान्य परीक्षण विफल हो जाते हैं

\n\n

क्या आपने कभी कोई यूनिट टेस्ट लिखा है जो "पाँच" पर पास होता है, और फिर एप्लिकेशन वास्तविक डेटा पर क्रैश हो जाता है? परिचित लगता है, है ना? क्लासिक example-based परीक्षण (जब हम विशिष्ट इनपुट और आउटपुट की जाँच करते हैं) अच्छे हैं, लेकिन उनमें एक मूलभूत कमी है: वे केवल वही जाँचते हैं जो हमने स्वयं सोचा है। क्या होगा यदि बग स्वीकार्य मानों की सीमा पर रहता है, या ऐसे संयोजन में जो हमारे दिमाग में ही नहीं आया?

\n\n

यहाँ पर Swift में प्रॉपर्टी-आधारित परीक्षण मंच पर आता है। यह एक ऐसा दृष्टिकोण है जिसमें आप विशिष्ट मामलों का नहीं, बल्कि गुणों (properties) का वर्णन करते हैं जो किसी भी इनपुट डेटा के लिए सत्य होने चाहिए। और एक विशेष फ्रेमवर्क (जैसे, SwiftCheck) सैकड़ों यादृच्छिक मान उत्पन्न करता है और जाँचता है कि क्या आपका गुण भंग होता है। यदि बग मिल जाता है, तो फ्रेमवर्क इनपुट डेटा को "न्यूनतम" करता है - और आपको सबसे सरल उदाहरण मिलता है जिस पर सब कुछ टूट जाता है।

\n\n

इस लेख में, हम आपके प्रोजेक्ट में Swift प्रॉपर्टी-आधारित परीक्षण को शामिल करने का तरीका समझेंगे, वास्तविक कोड उदाहरण लिखेंगे और देखेंगे कि इस दृष्टिकोण से कौन से बग पकड़े जा सकते हैं। चलिए शुरू करते हैं!

\n\n

प्रॉपर्टी-आधारित परीक्षण क्या है और इसकी आवश्यकता क्यों है?

\n\n

कल्पना करें कि आप एक ऐसे फ़ंक्शन का परीक्षण कर रहे हैं जो एक सरणी को सॉर्ट करता है। अलग-अलग सरणियों के साथ 10 परीक्षण लिखने के बजाय, आप कहते हैं: "किसी भी सरणी के लिए, सॉर्टिंग के बाद लंबाई नहीं बदलती है, और प्रत्येक तत्व अगले से छोटा या उसके बराबर होता है"। यही एक गुण है - एक इनवेरिएंट जिसे पूरा होना चाहिए।

\n\n

Swift में प्रॉपर्टी-आधारित परीक्षण इसके लिए आदर्श है:

\n
    \n
  • गणितीय फ़ंक्शनों की जाँच (जोड़, भाग, गोलाई);
  • \n
  • पार्सर और सीरियलाइज़र का परीक्षण (सीरियलाइज़ेशन → डीसीरियलाइज़ेशन मूल को वापस लाना चाहिए);
  • \n
  • बड़ी संख्या में संयोजनों वाले व्यावसायिक तर्क की जाँच;
  • \n
  • सीमा मानों पर प्रतिगमन की खोज।
  • \n
\n\n

मुख्य लाभ: आप उन बग्स को ढूंढते हैं जिनके अस्तित्व के बारे में आपको पता भी नहीं था। और यह, आप मानेंगे, स्पष्ट की पुष्टि करने से कहीं अधिक अच्छा है।

\n\n

SwiftCheck - Swift में प्रॉपर्टी-आधारित परीक्षण के लिए मुख्य उपकरण

\n\n

Swift की दुनिया में, इस दृष्टिकोण के लिए सबसे लोकप्रिय फ्रेमवर्क SwiftCheck है। यह Haskell (QuickCheck लाइब्रेरी) के विचारों को पोर्ट करता है और XCTest के साथ अच्छी तरह से एकीकृत होता है।

\n\n

शुरू करने के लिए, Package.swift में निर्भरता जोड़ें:

\n\n
// swift-tools-version:5.9\nimport PackageDescription\n\nlet package = Package(\n    name: "MyProject",\n    dependencies: [\n        .package(url: "https://github.com/typelift/SwiftCheck.git", from: "0.12.0")\n    ],\n    targets: [\n        .testTarget(\n            name: "MyProjectTests",\n            dependencies: ["SwiftCheck"]),\n    ]\n)\n
\n\n

अब परीक्षण लिखे जा सकते हैं। आइए मूल सिंटैक्स को समझें।

\n\n

पहला प्रॉपर्टी-आधारित परीक्षण: जोड़ की जाँच

\n\n

एक सरल गुण लिखते हैं: "जोड़ साहचर्य है"। किसी भी पूर्णांक के लिए a + b + c को (a + b) + c के बराबर होना चाहिए।

\n\n
import XCTest\nimport SwiftCheck\n\nclass MathPropertiesTests: XCTestCase {\n    func testAdditionIsAssociative() {\n        property("जोड़ साहचर्य है") <- forAll { (a: Int, b: Int, c: Int) in\n            return (a + b) + c == a + (b + c)\n        }\n    }\n}\n
\n\n

परीक्षण चलाएँ - यह 100 यादृच्छिक संयोजन (डिफ़ॉल्ट रूप से) चलाता है। यदि कोई भी विफल होता है, तो SwiftCheck विशिष्ट मान दिखाएगा। ध्यान दें: हमने एक भी विशिष्ट संख्या निर्दिष्ट नहीं की है! Swift में प्रॉपर्टी-आधारित परीक्षण स्वयं डेटा उत्पन्न करता है।

\n\n

राउंडट्रिप रूपांतरण की जाँच

\n\n

यह सबसे सामान्य पैटर्न है। मान लीजिए, हमारे पास एक संरचना है जो JSON में सीरियलाइज़ होती है। गुण: "सीरियलाइज़ेशन और डीसीरियलाइज़ेशन के बाद हमें वही ऑब्जेक्ट मिलता है"।

ब्लॉग

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