पायथन के स्टैंडर्ड डिस्ट्रीब्यूशन में 'doctest' मॉड्यूल होता है। इस मॉड्यूल की कार्यक्षमता उन टेक्स्ट के टुकड़ों को खोजना संभव बनाती है जो इंटरैक्टिव पायथन सेशन की तरह दिखते हैं और इन सेशन्स को यह देखने के लिए एक्ज़ीक्यूट करते हैं कि वे ठीक वैसे ही काम करते हैं जैसा दिखाया गया है। ये उदाहरण क्लास, मॉड्यूल या फ़ंक्शन में डॉकस्ट्रिंग एक्सप्रेशन्स से निकाले जाते हैं। डॉकटेस्ट्स को साथ वाली टेक्स्ट फ़ाइल से भी चलाया जा सकता है।
पायथन में, एक 'डॉकस्ट्रिंग' एक स्ट्रिंग लिटरल है जो क्लास, फ़ंक्शन या मॉड्यूल में पहली एक्सप्रेशन के रूप में प्रकट होता है। जब सुइट एक्ज़ीक्यूट होता है तो इसे अनदेखा किया जाता है, लेकिन यह कंपाइलर द्वारा पहचाना जाता है और घेरने वाले क्लास, फ़ंक्शन या मॉड्यूल के __doc__ एट्रिब्यूट में डाल दिया जाता है।
डॉकस्ट्रिंग्स आमतौर पर पायथन कोड के विभिन्न भागों के उदाहरण उपयोग का वर्णन करने के लिए रखे जाते हैं। doctest मॉड्यूल यह सत्यापित करने की अनुमति देता है कि कोड में रुक-रुक कर होने वाले संशोधनों के साथ ये डॉकस्ट्रिंग्स अप-टू-डेट हैं।
निम्न कोड में, एक फैक्टोरियल फ़ंक्शन को उदाहरण उपयोग के साथ परिभाषित किया गया है। यह सत्यापित करने के लिए कि उदाहरण उपयोग सही है, doctest मॉड्यूल में testmod() फ़ंक्शन को कॉल करें।
def add(a, b):
'''
>>> add(10, 20)
30
>>> add('aaa', 'bbb')
'aaabbb'
>>> add('aaa', 20)
Traceback (most recent call last):
...
TypeError: must be str, not int
'''
return a + b
पहले उपरोक्त स्क्रिप्ट को mytest.py के रूप में एंटर और सेव करें और इस स्क्रिप्ट को कमांड लाइन से चलाने का प्रयास करें।
python mytest.py
कोई आउटपुट नहीं दिखाया जाएगा जब तक कि उदाहरण विफल न हो। अब कमांड लाइन को बदलें:
python mytest.py -v
अब कंसोल निम्न परिणाम दिखाएगा:
F:\Python36>python mytest.py -v
Trying: add(10,20)
Expecting: 30
ok
Trying: add('aaa','bbb')
Expecting: 'aaabbb'
ok
Trying: add('aaa',20)
Expecting: Traceback (most recent call last):
...
TypeError: must be str, not int
ok
1 items had no tests: __main__
1 items passed all tests: 3 tests in __main__.add
3 tests in 2 items.
3 passed and 0 failed.
Test passed.
टेक्स्ट फ़ाइल में उदाहरणों की जांच
doctest का एक और सरल अनुप्रयोग टेक्स्ट फ़ाइल में इंटरैक्टिव उदाहरणों का परीक्षण करना है। यह testfile() फ़ंक्शन के साथ किया जा सकता है।
निम्न टेक्स्ट 'example.txt' नाम की टेक्स्ट फ़ाइल में स्टोर है:
Using 'add' ------------------- This is an example text file. First import 'add' from the 'mytest' module: >>> from mytest import add >>> add(10,20) 30
फ़ाइल कंटेंट को डॉकस्ट्रिंग माना जाता है। टेक्स्ट फ़ाइल में उदाहरणों को सत्यापित करने के लिए doctest मॉड्यूल के testfile() फ़ंक्शन का उपयोग करें।
def add(a, b):
return a + b
if __name__ == "__main__":
import doctest
doctest.testfile("example.txt")
testmod() की तरह, testfile() तब तक कुछ प्रदर्शित नहीं करेगा जब तक कोई उदाहरण विफल न हो। यदि कोई उदाहरण विफल होता है, तो विफल उदाहरण(एं) और विफलता(ओं) के कारण(ओं) को कंसोल पर प्रिंट किया जाता है, उसी फॉर्मेट का उपयोग करके जैसे testmod()।
अधिकांश मामलों में इंटरैक्टिव कंसोल सेशन का कॉपी-एंड-पेस्ट ठीक काम करता है, लेकिन doctest किसी विशिष्ट पायथन शेल का सटीक अनुकरण करने की कोशिश नहीं कर रहा है।
कोई भी अपेक्षित आउटपुट अंतिम '>>>' या '...' लाइन के तुरंत बाद होना चाहिए जिसमें कोड हो, और अपेक्षित आउटपुट (यदि कोई हो) अगले '>>>' या ऑल-व्हाइटस्पेस लाइन तक फैला होता है।
अपेक्षित आउटपुट में ऑल-व्हाइटस्पेस लाइन नहीं हो सकती, क्योंकि ऐसी लाइन को अपेक्षित आउटपुट के अंत का संकेत माना जाता है। यदि अपेक्षित आउटपुट में ब्लैंक लाइन है, तो अपने डॉकटेस्ट उदाहरण में प्रत्येक स्थान पर
डालें जहां ब्लैंक लाइन अपेक्षित हो।
इस लेख में doctest मॉड्यूल में testmod() और testfile() फ़ंक्शन्स पर चर्चा की गई है।