مقدمه
کتابخانه استاندارد پایتون شامل ماژولی به نام unittest است که به شما کمک میکند برای کدهای پایتون خود تست بنویسید و آنها را اجرا کنید.
تستهایی که با استفاده از unittest نوشته میشوند به شما کمک میکنند:
- باگهای برنامه را پیدا کنید
- از ایجاد خطاهای جدید هنگام تغییر کد جلوگیری کنید
- در توسعه مبتنی بر تست (TDD) مطمئن شوید هر بخش از کد تست مناسب دارد
در این آموزش یاد میگیرید چگونه با استفاده از ماژول unittest برای یک تابع تست بنویسید.
پیشنیازها
برای درک بهتر این آموزش، بهتر است با تعریف توابع در پایتون آشنا باشید.
تعریف کلاس TestCase
یکی از مهمترین کلاسهای ماژول unittest کلاس TestCase است.
این کلاس چارچوب اصلی تستنویسی را فراهم میکند.
مثال:
import unittest
def add_fish_to_aquarium(fish_list):
if len(fish_list) > 10:
raise ValueError(“A maximum of 10 fish can be added to the aquarium”)
return {“tank_a”: fish_list}
class TestAddFishToAquarium(unittest.TestCase):
def test_add_fish_to_aquarium_success(self):
actual = add_fish_to_aquarium(fish_list=[“shark”, “tuna”])
expected = {“tank_a”: [“shark”, “tuna”]}
self.assertEqual(actual, expected)
توضیح:
- ابتدا
unittestرا ایمپورت میکنیم. - تابع
add_fish_to_aquariumتعریف میشود. - اگر تعداد ماهیها بیشتر از 10 باشد خطا میدهد.
- سپس کلاس
TestAddFishToAquariumازunittest.TestCaseارثبری میکند. - متد
test_add_fish_to_aquarium_successبررسی میکند که خروجی تابع با مقدار مورد انتظار برابر باشد.
اجرای تست
برای اجرای تست:
خروجی:
———————————————————————-
Ran 1 test in 0.000sOK
علامت . یعنی تست با موفقیت اجرا شده است.
اگر تست شکست بخورد
مثلاً اگر مقدار مورد انتظار را اشتباه قرار دهیم:
خروجی:
…
FAILED (failures=1)
حرف F یعنی تست شکست خورده است.
تست کردن Exception
میتوان بررسی کرد که تابع در شرایط خاص خطا بدهد:
too_many_fish = [“shark”] * 25
with self.assertRaises(ValueError) as exception_context:
add_fish_to_aquarium(fish_list=too_many_fish)
اینجا بررسی میشود اگر تعداد ماهیها زیاد باشد، خطای ValueError رخ دهد.
متدهای مهم assert
چند متد پرکاربرد:
| متد | بررسی |
|---|---|
assertEqual(a,b) |
برابر بودن |
assertNotEqual(a,b) |
نابرابر بودن |
assertTrue(a) |
True بودن |
assertFalse(a) |
False بودن |
assertIn(a,b) |
وجود داشتن |
استفاده از setUp
متد setUp قبل از هر تست اجرا میشود.
مثال:
def setUp(self):
self.fish_tank = FishTank()
مزیت:
- کدهای آمادهسازی را یکبار مینویسید
- قبل از هر تست اجرا میشود
استفاده از tearDown
متد tearDown بعد از هر تست اجرا میشود و برای پاکسازی منابع استفاده میشود.
مثال:
self.fish_tank.empty_tank()
مثلاً برای:
- حذف فایل موقت
- بستن اتصال دیتابیس
- پاکسازی داده تست
جمعبندی
در این آموزش یاد گرفتید:
- استفاده از unittest برای تستنویسی
- تعریف کلاس
TestCase - اجرای تستها
- تست Exception ها
- استفاده از
setUp - استفاده از
tearDown
از همراهی شما با پارمین کلود متشکریم.
نظرات کاربران