কম্পিউটার টিউটোরিয়াল

ইন্টারঅ্যাক্টিভ পাইথন উদাহরণ টেস্ট করা (doctest)

পাইথনের স্ট্যান্ডার্ড ডিস্ট্রিবিউশনে 'doctest' মডিউল রয়েছে। এই মডিউলের ফাংশনালিটি ইন্টারঅ্যাক্টিভ পাইথন সেশনারের মত दिखানোর টেক্সটের টুকরো খুঁজে বের করতে এবং সেশনগুলো এক্সিকিউট করে দেখা সম্ভব করে তোলে যে তারা ঠিক gezeigtভাবে কাজ করে কিনা। এই উদাহরণগুলো ক্লাস, মডিউল বা ফাংশনের ডকস্ট্রিং এক্সপ্রেশন থেকে এক্সট্রাক্ট করা হয়। Doctests একটি টেক্সট ফাইল থেকে একটি ব llevado টেক্সট ফাইল থেকেও রান করা যায়।

পাইথনে, একটি 'docstring' হলো একটি স্ট্রিং লিটারেল যা একটি ক্লাস, ফাংশন বা মডিউলের প্রথম এক্সপ্রেশন হিসেবে দেখা যায়। স্যুট এক্সিকিউট হলে এটি উপেক্ষা করা হয়, কিন্তু কম্পাইলার এটি চিনে এবং enclosing ক্লাস, ফাংশন বা মডিউলের __doc__ অ্যাট্রিবিউটে রাখে।

Docstrings সাধারণত পাইথন কোডের বিভিন্ন অংশের উদাহরণ ব্যবহার বর্ণনা করার জন্য রাখা হয়। 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() ফাংশন আলোচনা করা হয়েছে।

  1. পাইথন Kivy উইন্ডোয়ে লেবেল (Label) যোগ করা

  2. পাইথনে অ্যারে রিপ্রেজেন্টেড নাম্বারে ১ যোগ করুন

  3. পাইথন Tkinter বাটনে স্টাইল যোগ করা

  4. Python-এ Path কীভাবে অ্যাড করবেন?