unittest পাইথনের একটি বিল্ট-ইন মডিউল, যা ইউনিট টেস্ট তৈরি ও চালানোর জন্য ব্যবহৃত হয়। এটি বিভিন্ন ফাংশনের আউটপুট যাচাই করতে এবং প্রোগ্রামের সঠিকতা নিশ্চিত করতে সহায়ক। unittest মডিউল দিয়ে আমরা ছোট ছোট ইউনিট বা অংশ টেস্ট করতে পারি, যা বড় প্রোগ্রামের নির্ভুলতা নিশ্চিত করতে সাহায্য করে।
unittest মডিউল দিয়ে টেস্ট লেখা
ধাপ ১: unittest মডিউল ইমপোর্ট করা
import unittest
ধাপ ২: টেস্ট ক্লাস তৈরি করা
unittest ব্যবহার করে একটি টেস্ট ক্লাস তৈরি করতে হবে, যা unittest.TestCase ক্লাস থেকে ইনহেরিট করবে। এই ক্লাসের মধ্যে টেস্ট মেথড গুলো test_ শব্দ দিয়ে শুরু করতে হবে।
উদাহরণ ১: দুটি সংখ্যার যোগফল বের করার একটি ফাংশনের জন্য টেস্ট
ধরি, আমরা একটি add ফাংশন লিখেছি, যা দুটি সংখ্যার যোগফল বের করে। এখন আমরা unittest মডিউল ব্যবহার করে এই ফাংশনটি টেস্ট করবো।
# calculator.py - ফাংশন সংজ্ঞা
def add(a, b):
return a + b
এখন, add ফাংশনের জন্য unittest মডিউল ব্যবহার করে টেস্ট লেখা যাক।
# test_calculator.py - টেস্ট কোড
import unittest
from calculator import add
class TestCalculator(unittest.TestCase):
def test_add_positive(self):
self.assertEqual(add(2, 3), 5) # পজিটিভ সংখ্যা পরীক্ষা
self.assertEqual(add(0, 5), 5) # শূন্য পরীক্ষা
def test_add_negative(self):
self.assertEqual(add(-1, -1), -2) # নেগেটিভ সংখ্যা পরীক্ষা
self.assertEqual(add(-1, 2), 1) # মিশ্র সংখ্যা পরীক্ষা
if __name__ == "__main__":
unittest.main()
এই টেস্ট কোডে TestCalculator নামে একটি ক্লাস তৈরি করা হয়েছে, যা unittest.TestCase থেকে ইনহেরিট করেছে। এই ক্লাসের মধ্যে test_add_positive এবং test_add_negative নামে দুটি টেস্ট মেথড রয়েছে, যা add ফাংশনের জন্য বিভিন্ন আর্গুমেন্ট দিয়ে আউটপুট পরীক্ষা করে।
টেস্ট রান করা
python test_calculator.py
আউটপুট:
..
----------------------------------------------------------------------
Ran 2 tests in 0.001s
OK
এখানে .. নির্দেশ করে যে দুটি টেস্ট সফলভাবে পাস হয়েছে।
বিভিন্ন assertion মেথড
unittest মডিউল বিভিন্ন assertion মেথড সরবরাহ করে, যা বিভিন্ন প্রকারের টেস্ট লিখতে সাহায্য করে। কিছু গুরুত্বপূর্ণ assertion মেথড:
- assertEqual(a, b):
aএবংbসমান কিনা তা পরীক্ষা করে। - assertNotEqual(a, b):
aএবংbসমান নয় কিনা তা পরীক্ষা করে। - assertTrue(x):
xসত্য কিনা তা পরীক্ষা করে। - assertFalse(x):
xমিথ্যা কিনা তা পরীক্ষা করে। - assertIsNone(x):
xNone কিনা তা পরীক্ষা করে। - assertIsNotNone(x):
xNone নয় কিনা তা পরীক্ষা করে।
উদাহরণ ২: গড় বের করার ফাংশনের জন্য টেস্ট
# math_functions.py - গড় বের করার ফাংশন
def average(numbers):
if not numbers:
return 0
return sum(numbers) / len(numbers)
average ফাংশনের জন্য টেস্ট লেখা যাক।
# test_math_functions.py - টেস্ট কোড
import unittest
from math_functions import average
class TestMathFunctions(unittest.TestCase):
def test_average(self):
self.assertEqual(average([1, 2, 3]), 2.0) # সাধারণ টেস্ট
self.assertEqual(average([]), 0) # খালি তালিকা
self.assertEqual(average([5]), 5) # একমাত্র উপাদান
def test_average_invalid(self):
self.assertNotEqual(average([1, 2, 3]), 3) # ভুল আউটপুট পরীক্ষা
if __name__ == "__main__":
unittest.main()
আউটপুট:
..
----------------------------------------------------------------------
Ran 2 tests in 0.001s
OK
unittest এর সুবিধা এবং সীমাবদ্ধতা
সুবিধা:
- সহজ সিনট্যাক্স: unittest মডিউল সহজ সিনট্যাক্স দিয়ে টেস্টিংকে সহজ করে তোলে।
- স্বয়ংক্রিয় টেস্টিং: কোড পরিবর্তনের পর দ্রুত টেস্টিং করতে সহায়ক।
- অ্যাসারশন মেথড: বিভিন্ন assertion মেথড রয়েছে, যা বিভিন্ন ধরনের আউটপুট পরীক্ষা করা সহজ করে।
সীমাবদ্ধতা:
- কঠিন টেস্ট কেস: বড় এবং জটিল প্রোগ্রামের জন্য অনেক টেস্ট কেস লিখতে হয়।
- টেস্ট লেখা সময়সাপেক্ষ: unittest লেখার জন্য সময় প্রয়োজন।
- সীমিত রিপোর্টিং: unittest এর বিল্ট-ইন রিপোর্টিং সীমিত, যা বড় প্রজেক্টে পর্যাপ্ত নয়।
সারসংক্ষেপ
unittest মডিউল দিয়ে ইউনিট টেস্ট লেখা সহজ এবং কার্যকরী, যা ছোট ছোট ইউনিট বা অংশ পরীক্ষা করতে সাহায্য করে। এটি কোডের স্থায়িত্ব ও সঠিকতা নিশ্চিত করতে সহায়ক এবং কোডের গুণগত মান উন্নত করে। unittest মডিউল ব্যবহার করে কোড পরিবর্তনের পরেও এর সঠিকতা নিশ্চিত করা যায়।