प्रॉपर्टी-बेस्ड टेस्टिंग C# में: वो बग पकड़ें जो यूनिट टेस्ट छोड़ देते हैं

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

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

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

आपका यूनिट टेस्ट झूठ बोल रहा है (और आप यह जानते हैं)

\n\n

कल्पना करें: आपने 50 यूनिट टेस्ट लिखे, सब हरे, कवरेज 90%। आप खुश हैं। लेकिन एक हफ्ते बाद प्रोडक्शन क्रैश हो जाता है। पता चलता है, आपका SortArray() मेथड [1, 2, 3] और [3, 1, 2] के लिए ठीक काम करता है, लेकिन [int.MaxValue, -1, 0] पर फेल हो जाता है। परिचित लग रहा है?

\n\n

क्लासिकल यूनिट टेस्ट की समस्या है डेवलपर का पूर्वाग्रह। आप वही टेस्ट लिखते हैं जो डेटा आप उम्मीद करते हैं। हैकर्स, असली यूज़र्स और रैंडम बाउंड्री कंडीशन दूसरे नियमों पर चलते हैं।

\n\n

यहाँ आता है C# में प्रॉपर्टी-बेस्ड टेस्टिंग (या प्रॉपर्टी-आधारित परीक्षण)। यह जाँचने के बजाय कि "अगर A, तो B", आप प्रॉपर्टीज़ (गुण) बताते हैं जो हमेशा सही होनी चाहिए। और फ्रेमवर्क खुद सैकड़ों रैंडम इनपुट जनरेट करता है और आपके दावों की जाँच करता है।

\n\n

इस लेख में, हम सीखेंगे कि FsCheck लाइब्रेरी के साथ C# में प्रॉपर्टी-बेस्ड टेस्टिंग कैसे लागू करें, असली उदाहरण लिखें, और देखें कि यह उन बग को कैसे पकड़ती है जो सामान्य टेस्ट छोड़ देते हैं।

\n\n

प्रॉपर्टी-बेस्ड टेस्टिंग क्या है?

\n\n

प्रॉपर्टी-बेस्ड टेस्टिंग एक ऐसा तरीका है जिसमें आप अपने प्रोग्राम के इन्वेरिएंट (अपरिवर्तनीय गुण) बताते हैं। उदाहरण के लिए:

\n
    \n
  • "सॉर्ट करने के बाद ऐरे की लंबाई नहीं बदलती"
  • \n
  • "स्ट्रिंग को उलटने पर फिर उलटने से मूल स्ट्रिंग मिलती है"
  • \n
  • "दो धनात्मक संख्याओं का योग हमेशा धनात्मक होता है"
  • \n
\n\n

फ्रेमवर्क (जैसे FsCheck) दर्जनों और सैकड़ों रैंडम इनपुट जनरेट करता है और जाँचता है कि प्रॉपर्टी सभी के लिए सही है। अगर कोई काउंटर-एग्ज़ाम्पल मिलता है — टेस्ट फेल हो जाता है, और आपको वो सटीक वैल्यू मिलती हैं जिन्होंने कोड तोड़ा।

\n\n

यूनिट टेस्ट के विपरीत, आप Assert.AreEqual(3, Add(1,2)) नहीं लिखते। आप Assert(x + y == y + x) लिखते हैं — और हज़ारों संख्याओं के जोड़ों के लिए कम्यूटेटिविटी (क्रम-विनिमय) का परीक्षण करते हैं।

\n\n

सामान्य यूनिट टेस्ट से अंतर

\n\n\n\n\n\n\n\n
यूनिट टेस्टप्रॉपर्टी-बेस्ड टेस्ट
खास उदाहरण जाँचते हैंसामान्य नियम जाँचते हैं
डेटा डेवलपर देता हैडेटा फ्रेमवर्क जनरेट करता है
बाउंड्री केस छोड़ देते हैंअपने आप बाउंड्री खोजते हैं
पढ़ने में आसानएब्स्ट्रैक्ट सोच चाहिए
\n\n

FsCheck लाइब्रेरी: आपका मुख्य हथियार

\n\n

C# की दुनिया में प्रॉपर्टी-बेस्ड टेस्टिंग के लिए डी-फैक्टो स्टैंडर्ड FsCheck है (मूल रूप से Haskell लाइब्रेरी QuickCheck का पोर्ट)। यह xUnit, NUnit और MSTest के साथ इंटीग्रेट होती है।

\n\n

इंस्टॉल करना आसान है:

\n
dotnet add package FsCheck\ndotnet add package FsCheck.Xunit  // xUnit के साथ इंटीग्रेशन के लिए
\n\n

FsCheck प्रिमिटिव (int, string, float), लिस्ट, ऐरे, टपल और यहाँ तक कि कस्टम टाइप (कस्टम जनरेटर के ज़रिए) के लिए रैंडम डेटा जनरेट कर सकता है।

\n\n

C# में पहला प्रॉपर्टी-बेस्ड टेस्ट लिखें

\n\n

सरल से शुरू करते हैं: जाँचें कि पूर्णांकों का जोड़ कम्यूटेटिव है या नहीं।

\n\n
using FsCheck;\nusing FsCheck.Xunit;\n\npublic class AdditionTests\n{\n    [Property]\n    public bool Commutative_Addition(int x, int y)\n    {\n        return x + y == y + x;\n    }\n}
\n\n

टेस्ट चलाएँ। FsCheck 100 रैंडम int जोड़े (डिफ़ॉल्ट रूप से) जनरेट करेगा और प्रॉपर्टी जाँचेगा। अगर कोई काउंटर-एग्ज़ाम्पल नहीं मिलता — टेस्ट हरा है। अगर हमने गलती की (जैसे x - y == y - x लिखा), तो टेस्ट एक खास उदाहरण के साथ फेल होगा: (5, 3) — क्योंकि 5 - 3 != 3 - 5।

\n\n

कोड को समझें

\n
    \n
  • [Property] — एट्रीब्यूट जो FsCheck को बताता है कि यह प्रॉपर्टी-बेस्ड टेस्ट है।
  • \n
  • मेथड bool रिटर्न करता है — अगर false रिटर्न करता है, टेस्ट फेल होता है।
  • \n
  • पैरामीटर int x, int y — FsCheck अपने आप रैंडम वैल्यू डालेगा

ब्लॉग

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