Python নিজের testing framework built in নিয়ে আসে — unittest — তাই একটা প্রথম আসল test-এর জন্য কোনো অতিরিক্ত package লাগে না। (এই সাইটের Where to Go Next lesson-এ উল্লেখ করা pytest একটা জনপ্রিয় third-party বিকল্প হালকা সিনট্যাক্স সহ, underlying ধারণা স্বাচ্ছন্দ্য হয়ে গেলে explore করার যোগ্য।)
# test_math.py
import unittest
def add(a, b):
return a + b
class TestAdd(unittest.TestCase):
def test_sums_two_numbers(self):
self.assertEqual(add(2, 3), 5)
if __name__ == '__main__':
unittest.main()python -m unittest test_math.py
# .
# ----------------------------------------------------------------------
# Ran 1 test in 0.000s
# OK| Method | Check করে |
|---|---|
| assertEqual(a, b) | a == b |
| assertNotEqual(a, b) | a != b |
| assertTrue(x) | x truthy |
| assertIsNone(x) | x None |
| assertRaises(ExceptionType) | কোডের একটা block দেওয়া exception raise করে |
| assertIn(item, container) | item container-এর ভেতরে পাওয়া যায় |
def divide(a, b):
if b == 0:
raise ValueError('Cannot divide by zero')
return a / b
class TestDivide(unittest.TestCase):
def test_raises_on_zero(self):
with self.assertRaises(ValueError):
divide(10, 0)একটা ক্লাসের প্রতিটা test method-এর আগে আর পরে স্বয়ংক্রিয়ভাবে চলে — বারবার প্রস্তুতির জন্য useful, যেমন প্রতিবার একটা নতুন object তৈরি করা।
class TestShoppingCart(unittest.TestCase):
def setUp(self):
self.cart = ShoppingCart() # প্রতিটা test-এর আগে একটা নতুন cart
def test_starts_empty(self):
self.assertEqual(len(self.cart.items), 0)
def test_add_item(self):
self.cart.add('apple')
self.assertIn('apple', self.cart.items)python -m unittest discover
# test_*.py-তে মেলা প্রতিটা file স্বয়ংক্রিয়ভাবে খুঁজে চালায়Failure case-ও test করুন
একটা test suite যা শুধু "happy path" (বৈধ input, প্রত্যাশিত success) ব্যায়াম করে বেশিরভাগ আসল bug মিস করে — খারাপ input, একটা edge case (একটা খালি list, একটা zero), বা একটা প্রত্যাশিত exception-এর জন্য ইচ্ছাকৃতভাবে অন্তত একটা test লিখুন।