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

পাইথনে doctest মডিউল ব্যবহার করে টেস্টিং করা

আমরা জানি docstring পাইথনে ফাংশন ও ক্লাস সম্পর্কে অতিরিক্ত তথ্য দেয়। আমরা এটি doctest মডিউল ব্যবহার করে ফাংশন টেস্ট করার জন্যও ব্যবহার করতে পারি। doctest মডিউল >>> দিয়ে শুরু হওয়া কোড এক্সিকিউট করে এবং প্রত্যাশিত আউটপুটের সাথে তুলনা করে।

doctest দিয়ে ফাংশন লিখতে নিচের ধাপগুলো অনুসরণ করুন।

  • doctest মডিউল ইম্পোর্ট করুন।
  • ডকস্ট্রিংসহ ফাংশন লিখুন। ডকস্ট্রিংয়ের ভিতরে একই ফাংশন টেস্ট করার জন্য নিচের দুটি লাইন লিখুন।
    • >>function_name(*args).
    • প্রত্যাশিত আউটপুট।
  • ফাংশন কোড লিখুন।
  • এখন doctest.testmod(name=function_name, verbose=True) ফাংশন কল করুন টেস্ট করার জন্য। যদি verbose False থাকে এবং সব টেস্ট পাস হয়, তবে টেস্ট রেজাল্ট দেখা যাবে না। True রাখা ভালো।

উদাহরণ

চলুন doctest দিয়ে একটি সিম্পল ফাংশন লিখি।

# importing the module
import doctest

# function
def numbers_sum(*args) -> int:
    """
    This function returns the sum of all the arguments
    Shell commands for testing
    invoking the function followed by expected output:
    >>> numbers_sum(1, 2, 3, 4, 5)
    15
    >>> numbers_sum(6, 7, 8)
    21
    """
    return sum(args)

# invoking the testmod function
doctest.testmod(name='numbers_sum', verbose=True)

যদি উপরের কোডটি রান করুন, তবে নিচের রেজাল্ট পাবেন।

Trying: numbers_sum(1, 2, 3, 4, 5)
Expecting: 15
ok
Trying: numbers_sum(6, 7, 8)
Expecting: 21
ok
1 items had no tests: numbers_sum
1 items passed all tests: 2 tests in numbers_sum.numbers_sum
2 tests in 2 items.
2 passed and 0 failed.
Test passed.
TestResults(failed=0, attempted=2)

আউটপুটে দেখুন, প্রতিটি টেস্টের পরে ok শব্দটি আছে। অর্থাৎ প্রত্যাশিত আউটপুট এবং একচুআল আউটপুট মিলেছে। আউটপুটের শেষে টেস্ট রেজাল্ট চেক করুন।

উদাহরণ

চলুন দেখি টেস্ট ফেইল হলে কী হয়। একই উদাহরণে ভুল আউটপুট দিয়ে রান করুন।

# importing the module
import doctest

# function
def numbers_sum(*args) -> int:
    """
    This function returns the sum of all the arguments
    Shell commands for testing
    invoking the function followed by expected output:
    >>> numbers_sum(1, 2, 3, 4, 5)
    10
    >>> numbers_sum(6, 7, 8)
    23
    """
    return sum(args)

# invoking the testmod function
doctest.testmod(name='numbers_sum', verbose=True)

আউটপুট

যদি উপরের প্রোগ্রাম এক্সিকিউট করুন, তবে নিচের রেজাল্ট পাবেন।

Trying: numbers_sum(1, 2, 3, 4, 5)
Expecting: 10
**********************************************************************
File "__main__", line 10, in numbers_sum.numbers_sum
Failed example: numbers_sum(1, 2, 3, 4, 5)
Expected: 10
Got: 15
Trying: numbers_sum(6, 7, 8)
Expecting: 23
**********************************************************************
File "__main__", line 12, in numbers_sum.numbers_sum
Failed example: numbers_sum(6, 7, 8)
Expected: 23
Got: 21
1 items had no tests: numbers_sum
**********************************************************************
1 items had failures: 2 of 2 in numbers_sum.numbers_sum
2 tests in 2 items.
0 passed and 2 failed.
***Test Failed***
2 failures.
TestResults(failed=2, attempted=2)

টেস্ট রেজাল্টে দেখুন, ২টি ফেইল করেছে। আউটপুটে expected এবং actual আউটপুটও চেক করতে পারেন।

উপসংহার

টিউটোরিয়াল সম্পর্কে কোনো সন্দেহ থাকলে কমেন্ট সেকশনে জানান।


  1. পাইথনে pyqrcode মডিউল দিয়ে QR কোড জেনারেট করা

  2. পাইথনে unittest মডিউল দিয়ে ইউনিট টেস্টিং

  3. পাইথনে Unittest মডিউল ব্যবহার করে ইউনিট টেস্টিং

  4. পাইথনে issubset() ফাংশন