Python unittest Documentation
- पायथन यूनिटटेस्ट प्रलेखन: शुरुआती के लिए एक विस्तृत गाइड
पायथन यूनिटटेस्ट एक शक्तिशाली उपकरण है जिसका उपयोग पायथन कोड की गुणवत्ता सुनिश्चित करने के लिए किया जाता है। यह डेवलपर्स को छोटे, अलग-अलग कोड इकाइयों (जिन्हें यूनिट कहा जाता है) का परीक्षण करने की अनुमति देता है, यह सुनिश्चित करते हुए कि वे अपेक्षा के अनुरूप काम कर रहे हैं। यह लेख शुरुआती लोगों के लिए पायथन यूनिटटेस्ट का एक विस्तृत परिचय है, जो बुनियादी अवधारणाओं से लेकर उन्नत तकनीकों तक सब कुछ कवर करता है।
यूनिट टेस्टिंग क्या है?
यूनिट टेस्टिंग सॉफ्टवेयर टेस्टिंग का एक स्तर है जहां व्यक्तिगत इकाइयों या घटकों का परीक्षण किया जाता है। एक 'यूनिट' एक फ़ंक्शन, विधि, क्लास या कोड का कोई अन्य छोटा, अलग-अलग भाग हो सकता है। यूनिट टेस्टिंग का लक्ष्य प्रत्येक यूनिट को अलग से सत्यापित करना है कि यह सही ढंग से काम कर रहा है।
यूनिट टेस्टिंग के कई लाभ हैं:
- **बग्स का जल्दी पता लगाना:** यूनिट टेस्टिंग बग्स को जल्दी पहचानने में मदद करता है, जब उन्हें ठीक करना आसान और सस्ता होता है।
- **कोड की गुणवत्ता में सुधार:** यूनिट टेस्टिंग डेवलपर्स को बेहतर, अधिक रखरखाव योग्य कोड लिखने के लिए प्रोत्साहित करता है।
- **पुनर्लेखन में आत्मविश्वास:** यूनिट टेस्टिंग कोड को रीफैक्टर करते समय आत्मविश्वास प्रदान करता है, यह सुनिश्चित करता है कि परिवर्तन मौजूदा कार्यक्षमता को नहीं तोड़ते हैं।
- **प्रलेखन के रूप में कार्य:** यूनिट टेस्ट आपके कोड के लिए एक प्रकार का प्रलेखन भी प्रदान करते हैं, जो बताते हैं कि प्रत्येक यूनिट को कैसे उपयोग किया जाना चाहिए।
सॉफ्टवेयर परीक्षण के विभिन्न स्तरों में यूनिट टेस्टिंग एक महत्वपूर्ण हिस्सा है। एकीकरण परीक्षण और सिस्टम परीक्षण अन्य महत्वपूर्ण चरण हैं।
यूनिटटेस्ट मॉड्यूल का परिचय
पायथन में, यूनिट टेस्टिंग के लिए `unittest` मॉड्यूल प्रदान किया गया है। यह मॉड्यूल टेस्ट केस बनाने, टेस्ट रनर को कॉन्फ़िगर करने और टेस्ट परिणामों को रिपोर्ट करने के लिए आवश्यक उपकरण प्रदान करता है।
`unittest` मॉड्यूल में मुख्य अवधारणाएं हैं:
- **TestCase:** यह एक क्लास है जिसका उपयोग टेस्ट केस बनाने के लिए किया जाता है। प्रत्येक टेस्ट केस में एक या अधिक टेस्ट मेथड होते हैं।
- **Test Method:** यह एक मेथड है जिसका नाम `test` से शुरू होता है। टेस्ट मेथड में वास्तविक टेस्ट लॉजिक होता है।
- **Test Suite:** यह टेस्ट केस का एक संग्रह है।
- **Test Runner:** यह टेस्ट सूट को चलाता है और टेस्ट परिणामों को रिपोर्ट करता है।
एक साधारण टेस्ट केस बनाना
आइए एक साधारण टेस्ट केस का उदाहरण देखें। मान लीजिए कि हमारे पास एक फ़ंक्शन है जो दो संख्याओं को जोड़ता है:
```python def add(x, y):
"""दो संख्याओं को जोड़ता है""" return x + y
```
अब, हम इस फ़ंक्शन के लिए एक टेस्ट केस बनाते हैं:
```python import unittest
class TestAdd(unittest.TestCase):
def test_add_positive_numbers(self): self.assertEqual(add(2, 3), 5)
def test_add_negative_numbers(self): self.assertEqual(add(-1, -2), -3)
def test_add_mixed_numbers(self): self.assertEqual(add(5, -2), 3)
if __name__ == '__main__':
unittest.main()
```
इस कोड में, हमने `unittest.TestCase` से इनहेरिट करने वाली `TestAdd` नामक एक क्लास बनाई है। इस क्लास में तीन टेस्ट मेथड हैं: `test_add_positive_numbers`, `test_add_negative_numbers` और `test_add_mixed_numbers`। प्रत्येक टेस्ट मेथड `self.assertEqual()` मेथड का उपयोग यह दावा करने के लिए करता है कि फ़ंक्शन `add()` का परिणाम अपेक्षित मान के बराबर है।
`unittest.main()` फ़ंक्शन टेस्ट रनर को शुरू करता है और टेस्ट सूट को चलाता है।
सामान्य अभिकथन (Assertions)
`unittest` मॉड्यूल विभिन्न प्रकार के अभिकथन प्रदान करता है जिनका उपयोग टेस्ट परिणामों को सत्यापित करने के लिए किया जा सकता है। कुछ सामान्य अभिकथन निम्नलिखित हैं:
- `assertEqual(a, b)`: जांचता है कि `a` और `b` बराबर हैं।
- `assertNotEqual(a, b)`: जांचता है कि `a` और `b` बराबर नहीं हैं।
- `assertTrue(x)`: जांचता है कि `x` सत्य है।
- `assertFalse(x)`: जांचता है कि `x` असत्य है।
- `assertIs(a, b)`: जांचता है कि `a` और `b` एक ही ऑब्जेक्ट हैं।
- `assertIsNot(a, b)`: जांचता है कि `a` और `b` एक ही ऑब्जेक्ट नहीं हैं।
- `assertIsNone(x)`: जांचता है कि `x` `None` है।
- `assertIsNotNone(x)`: जांचता है कि `x` `None` नहीं है।
- `assertIn(a, b)`: जांचता है कि `a`, `b` में मौजूद है।
- `assertNotIn(a, b)`: जांचता है कि `a`, `b` में मौजूद नहीं है।
- `assertIsInstance(a, b)`: जांचता है कि `a`, `b` का एक उदाहरण है।
- `assertNotIsInstance(a, b)`: जांचता है कि `a`, `b` का एक उदाहरण नहीं है।
- `assertRaises(exception, callable, *args, **kwargs)`: जांचता है कि `callable(*args, **kwargs)` एक विशिष्ट अपवाद उठाता है।
ये अभिकथन आपके टेस्ट को अधिक शक्तिशाली और लचीला बनाते हैं। टेस्ट-ड्रिवन डेवलपमेंट में इनका भरपूर उपयोग होता है।
टेस्ट सेटअप और टीयरडाउन
कभी-कभी, टेस्ट केस चलाने से पहले कुछ सेटअप करने या टेस्ट केस चलाने के बाद कुछ सफाई करने की आवश्यकता होती है। `unittest` मॉड्यूल `setUp()` और `tearDown()` मेथड प्रदान करता है जो इस उद्देश्य के लिए उपयोग किए जा सकते हैं।
- `setUp()`: यह मेथड प्रत्येक टेस्ट मेथड से पहले चलाया जाता है। इसका उपयोग टेस्ट केस के लिए आवश्यक संसाधनों को स्थापित करने के लिए किया जा सकता है।
- `tearDown()`: यह मेथड प्रत्येक टेस्ट मेथड के बाद चलाया जाता है। इसका उपयोग टेस्ट केस द्वारा उपयोग किए गए संसाधनों को साफ करने के लिए किया जा सकता है।
उदाहरण:
```python import unittest
class TestDatabase(unittest.TestCase):
def setUp(self): # डेटाबेस कनेक्शन स्थापित करें self.connection = connect_to_database()
def tearDown(self): # डेटाबेस कनेक्शन बंद करें self.connection.close()
def test_insert_data(self): # डेटा डालें और सत्यापित करें pass
def test_select_data(self): # डेटा चुनें और सत्यापित करें pass
```
इस उदाहरण में, `setUp()` मेथड डेटाबेस कनेक्शन स्थापित करता है, और `tearDown()` मेथड डेटाबेस कनेक्शन बंद करता है। यह सुनिश्चित करता है कि प्रत्येक टेस्ट केस एक साफ वातावरण में चलाया जाता है। डेटाबेस परीक्षण के लिए यह महत्वपूर्ण है।
टेस्ट डिस्कवरी और रनिंग
`unittest` मॉड्यूल स्वचालित रूप से टेस्ट केस की खोज कर सकता है और उन्हें चला सकता है। टेस्ट केस की खोज के लिए, आप `unittest.TestLoader` क्लास का उपयोग कर सकते हैं।
```python import unittest
loader = unittest.TestLoader() suite = loader.discover('tests', pattern='test*.py')
runner = unittest.TextTestRunner() runner.run(suite) ```
इस कोड में, `loader.discover()` मेथड `tests` डायरेक्टरी में `test*.py` पैटर्न से मेल खाने वाली सभी फ़ाइलों में टेस्ट केस की खोज करता है। फिर, `runner.run()` मेथड टेस्ट सूट को चलाता है और टेस्ट परिणामों को रिपोर्ट करता है।
आप कमांड लाइन से भी टेस्ट चला सकते हैं:
```bash python -m unittest discover tests ```
यह कमांड `tests` डायरेक्टरी में सभी टेस्ट केस को खोजेगा और उन्हें चलाएगा। कमांड लाइन इंटरफेस का उपयोग करके टेस्ट चलाना स्वचालित एकीकरण और निरंतर वितरण (CI/CD) पाइपलाइन में उपयोगी है।
मॉक ऑब्जेक्ट्स का उपयोग
कभी-कभी, आपके कोड को बाहरी निर्भरताओं पर निर्भर रहना पड़ता है, जैसे कि डेटाबेस या वेब सेवाएं। यूनिट टेस्टिंग करते समय, इन निर्भरताओं को मॉक करना उपयोगी होता है ताकि आप अपने कोड को अलग से टेस्ट कर सकें।
`unittest.mock` मॉड्यूल मॉक ऑब्जेक्ट बनाने के लिए उपकरण प्रदान करता है। मॉक ऑब्जेक्ट वास्तविक निर्भरताओं के व्यवहार का अनुकरण करते हैं, लेकिन वे वास्तविक निर्भरताओं पर कोई वास्तविक प्रभाव नहीं डालते हैं।
उदाहरण:
```python import unittest from unittest.mock import Mock
def get_data_from_api(url):
# वेब एपीआई से डेटा प्राप्त करें pass
class TestGetData(unittest.TestCase):
def test_get_data_success(self): # मॉक एपीआई प्रतिक्रिया mock_response = Mock() mock_response.status_code = 200 mock_response.json.return_value = {'data': 'test data'}
# एपीआई कॉल को मॉक करें get_data_from_api = Mock(return_value=mock_response)
# टेस्ट चलाएं result = get_data_from_api('http://example.com/api') self.assertEqual(result.status_code, 200) self.assertEqual(result.json(), {'data': 'test data'})
```
इस उदाहरण में, हमने `get_data_from_api` फ़ंक्शन को मॉक किया है ताकि हम वेब एपीआई पर निर्भर न रहें। यह हमें अपने कोड को अलग से टेस्ट करने की अनुमति देता है। मॉक परीक्षण जटिल सिस्टम में यूनिट टेस्टिंग को सरल बनाने का एक शक्तिशाली तरीका है।
उन्नत विषय
- **टेस्ट कवरेज:** टेस्ट कवरेज एक माप है जो दर्शाता है कि आपके कोड का कितना भाग आपके टेस्ट केस द्वारा कवर किया गया है। उच्च टेस्ट कवरेज का मतलब है कि आपके कोड के अधिकांश भाग का परीक्षण किया गया है। टेस्ट कवरेज उपकरण आपको टेस्ट कवरेज को मापने और सुधारने में मदद कर सकते हैं।
- **फिक्स्चर:** फिक्स्चर टेस्ट केस के लिए एक स्थिर वातावरण प्रदान करते हैं। वे टेस्ट केस को चलाने से पहले कुछ डेटा या संसाधनों को स्थापित कर सकते हैं और टेस्ट केस को चलाने के बाद उन्हें साफ कर सकते हैं।
- **पैरामीट्रिज्ड टेस्ट:** पैरामीट्रिज्ड टेस्ट आपको विभिन्न इनपुट मानों के साथ एक ही टेस्ट केस को कई बार चलाने की अनुमति देते हैं। यह टेस्ट केस को अधिक लचीला और पुन: प्रयोज्य बनाता है।
- **टेस्ट डिस्कवरी के लिए कस्टम पैटर्न:** आप `unittest.TestLoader.discover()` मेथड में `pattern` तर्क का उपयोग करके टेस्ट केस की खोज के लिए कस्टम पैटर्न निर्दिष्ट कर सकते हैं।
निष्कर्ष
पायथन यूनिटटेस्ट एक शक्तिशाली उपकरण है जिसका उपयोग पायथन कोड की गुणवत्ता सुनिश्चित करने के लिए किया जा सकता है। यह लेख शुरुआती लोगों के लिए पायथन यूनिटटेस्ट का एक विस्तृत परिचय प्रदान करता है, जो बुनियादी अवधारणाओं से लेकर उन्नत तकनीकों तक सब कुछ कवर करता है। यूनिट टेस्टिंग का उपयोग करके, आप अपने कोड को अधिक विश्वसनीय, रखरखाव योग्य और त्रुटि-मुक्त बना सकते हैं।
डीबगिंग के साथ मिलकर यूनिट टेस्टिंग आपके सॉफ्टवेयर विकास प्रक्रिया को और बेहतर बना सकती है। कोड समीक्षा में यूनिट टेस्ट परिणामों को शामिल करना एक अच्छी प्रथा है।
तकनीकी विश्लेषण में, यूनिट टेस्टिंग यह सुनिश्चित करने में मदद कर सकती है कि आपके विश्लेषण एल्गोरिदम सही ढंग से काम कर रहे हैं। वॉल्यूम विश्लेषण के लिए भी, यूनिट टेस्ट आपके डेटा प्रोसेसिंग पाइपलाइन की विश्वसनीयता सुनिश्चित कर सकते हैं। बाइनरी ऑप्शन ट्रेडिंग रणनीतियाँ के विकास में, यूनिट टेस्टिंग एल्गोरिदम की सटीकता को सत्यापित करने के लिए महत्वपूर्ण है। जोखिम प्रबंधन में भी, यूनिट टेस्टिंग आपके जोखिम मूल्यांकन मॉडल की सटीकता को सुनिश्चित कर सकती है। पोर्टफोलियो अनुकूलन एल्गोरिदम को यूनिट टेस्ट के माध्यम से सत्यापित किया जाना चाहिए। वित्तीय मॉडलिंग में, यूनिट टेस्टिंग मॉडल की सटीकता और स्थिरता सुनिश्चित करती है। समय श्रृंखला विश्लेषण के लिए उपयोग किए जाने वाले एल्गोरिदम को यूनिट टेस्ट के माध्यम से सत्यापित किया जाना चाहिए। मशीन लर्निंग मॉडल को तैनात करने से पहले यूनिट टेस्ट के साथ सत्यापित किया जाना चाहिए। डेटा माइनिंग प्रक्रियाओं की सटीकता सुनिश्चित करने के लिए यूनिट टेस्टिंग महत्वपूर्ण है। सांख्यिकीय विश्लेषण में, यूनिट टेस्टिंग एल्गोरिदम की सटीकता को सत्यापित करने में मदद करती है। आर्थिक मॉडलिंग में, यूनिट टेस्टिंग मॉडल की स्थिरता और सटीकता सुनिश्चित करती है। निवेश रणनीतियाँ को लागू करने से पहले यूनिट टेस्ट के माध्यम से सत्यापित किया जाना चाहिए। उच्च आवृत्ति व्यापार एल्गोरिदम को यूनिट टेस्ट के माध्यम से सत्यापित किया जाना चाहिए।
अभी ट्रेडिंग शुरू करें
IQ Option पर रजिस्टर करें (न्यूनतम जमा $10) Pocket Option में खाता खोलें (न्यूनतम जमा $5)
हमारे समुदाय में शामिल हों
हमारे Telegram चैनल @strategybin से जुड़ें और प्राप्त करें: ✓ दैनिक ट्रेडिंग सिग्नल ✓ विशेष रणनीति विश्लेषण ✓ बाजार की प्रवृत्ति पर अलर्ट ✓ शुरुआती के लिए शिक्षण सामग्री