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

পাইথন ইউনিট টেস্টিং (Python Unit Testing) কী?


ইউনিট টেস্টিং কী?

ইউনিট টেস্টিং হলো একটি সফ্টওয়্যার টেস্টিং টাইপ যেখানে সিস্টেমের প্রতিটি indywidual কম্পোনেন্ট টেস্ট করা হয়। ইয়ুনিট টেস্টিং ডেভেলপারদের জন্য একটি গুরুত্বপূর্ণ অভ্যাস। এটি নিশ্চিত করে যে সফ্টওয়্যারের প্রতিটি কম্পোনেন্ট প্রত্যাশা অনুযায়ী কাজ করছে। ইয়ুনিট টেস্টিং মূলত সফ্টওয়্যার ডেভেলপমেন্টের কোডিং ফেজে ডেভেলপারদের 의해 করা হয়।

ইউনিট টেস্টিং সমস্যা ফিক্স করা সহজ করে দেয় কারণ ডেভেলপাররা জানতে পারেন সিস্টেম বা সফ্টওয়্যারের কোন নির্দিষ্ট কম্পোনেন্টে সমস্যা আছে এবং সেটি ফিক্স করতে পারেন।

পাইথন ইউনিট টেস্টিং

পাইথনে একটি বিল্ট-ইন প্যাকেজ আছে যেটি unittest নামে ডাকা হয় যা ইউনিট টেস্টিং পারফর্ম করতে ব্যবহৃত হয়। ইউনিট টেস্টিং কোডকে ফিউচার-প্রুফ করে দেয় কারণ ডেভেলপাররা সেই কেসগুলো অনুমান করে যেখানে কোড ফেইল করতে পারে এবং সেগুলোর বিপরীতে কোড টেস্ট করা হয়। যদিও আমরা কিছু কেস মিস করতে পারি, তবুও অধিকাংশ কেস এড্রেস করা হয় এবং কোড সেগুলোর বিপরীতে টেস্ট করা হয়।

unittest মডিউলটি পাইথন প্রোগ্রামে ইম্পোর্ট করে ব্যবহার করা যায় নিচের মতো:

import unittest

উদাহরণ

মান লें, আমাদের একটি সিম্পল ফাংশন আছে যা একটি বর্গক্ষেত্রের ক্ষেত্রফল ক্যালকুলেট করে। এই ফাইলটি 'area.py' নামে সংরক্ষিত।

def area(a):
    return (a+a)

এখন, উপরের ফাংশনের জন্য ইউনিট টেস্ট কোড লিখি, যা আমাদের জানাবে আমাদের ফাংশন প্রত্যাশিত আউটপুট দিচ্ছে কিনা। ইউনিট টেস্ট কোড ফাইলটি "unit_test.py" নামে সংরক্ষিত।

unit_test.py -

from area import *
import unittest

class Testarea(unittest.TestCase):
    def test_area(self):
        self.assertAlmostEqual(area(5), 25)
        self.assertAlmostEqual(area(3), 9)
        self.assertAlmostEqual(area(4), 16)

এখানে, টেস্ট করার কোড থাকা ফাইলটি ইম্পোর্ট করা হয়েছে। unittest মেথড assertAlmostEqual() ব্যবহার করা হয়েছে। এটি কিছু ইনপুট দিয়ে area ফাংশনকে কল করে এবং দ্বিতীয় প্যারামিটারে ফাংশন থেকে রিটার্ন হওয়া প্রত্যাশিত আউটপুট থাকে। যদি area() থেকে রিটার্ন হওয়া আউটপুট প্রত্যাশিত আউটপুটের সমান হয়, তবে টেস্ট পাস হবে, অন্যথায় ফেইল।

এখন কমান্ড প্রম্পট থেকে unit_test.py রান করি যাতে আমাদের area() কোড টেস্ট পাস করে কিনা দেখতে পাই।

unit_test ফাইল রান করার জন্য কমান্ড প্রম্পট থেকে নিচের কমান্ড এক্সিকিউট করুন।

python -m unittest unit_test.py

আউটপুট

C:\Users\Inderjit Singh\Desktop>python -m unittest unit_test.py
F
======================================================================
FAIL: test_area (unit_test.Testarea)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\Inderjit Singh\Desktop\unit_test.py", line 7, in test_area
    self.assertAlmostEqual(area(5),25)
AssertionError: 10 != 25 within 7 places (15 difference)
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (failures=1)

আমাদের কোড ইউনিট টেস্টিং-এ ফেইল করেছে। কারণটি ট্রেসব্যাক-এ দেওয়া আছে। প্রথম ফাংশন self.assertAlmostEqual(area(5),25) আমাদের কোডকে ফেইল করেছে। কারণ ফাংশনটি ১০ রিটার্ন করছে কিন্তু প্রত্যাশিত আউটপুট ২৫।

যেহেতু এটি একটি সহজ ফাংশন, আমরা এর ফিক্স জানি। আমাদের area() কোডটি ভুল। এটি (a*a) রিটার্ন করা উচিত (a+a) না।

আসুন area() কোড ফিক্স করি এবং ইউনিট টেস্ট রি-রান করি।

def area(a):
    return (a*a)

unit_test.py রি-রান করুন

C:\Users\Inderjit Singh\Desktop>python -m unittest unit_test.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK

এখন, যেহেতু আমরা area()-তে কোড ঠিক করেছি, এটি OK স্ট্যাটাস সহ সফলভাবে রান করেছে। এটি নিশ্চিত করে যে আমাদের কোড unit_test.py-তে নির্দিষ্ট সকল কেসের বিপরীতে পরিপূর্ণভাবে রান করছে।

এটি ইউনিট টেস্টিং সম্পর্কে ধারণা দেয়ার জন্য একটি খুব সহজ উদাহরণ। unittest মডিউলে আরও অনেক ফাংশন রয়েছে যেগুলো ডেভেলপমেন্ট প্রসেসে ইউনিট টেস্টিং-এ ব্যবহার করা হয়।


  1. পাইথনে সর্বোচ্চ ত্রিভুজের এলিয়া (Largest Triangle Area) নির্ণয়

  2. পাইথনে CGI কী?

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

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