نحوه استفاده از unittest برای نوشتن تست یک تابع در پایتون

مقدمه

کتابخانه استاندارد پایتون شامل ماژولی به نام 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 بررسی می‌کند که خروجی تابع با مقدار مورد انتظار برابر باشد.

اجرای تست

برای اجرای تست:

python -m unittest test_add_fish_to_aquarium.py

خروجی:

.
———————————————————————-
Ran 1 test in 0.000sOK

علامت . یعنی تست با موفقیت اجرا شده است.


اگر تست شکست بخورد

مثلاً اگر مقدار مورد انتظار را اشتباه قرار دهیم:

expected = {“tank_a”: [“rabbit”]}

خروجی:

F

FAILED (failures=1)

حرف F یعنی تست شکست خورده است.


تست کردن Exception

می‌توان بررسی کرد که تابع در شرایط خاص خطا بدهد:

def test_add_fish_to_aquarium_exception(self):
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 قبل از هر تست اجرا می‌شود.

مثال:

class TestFishTank(unittest.TestCase):
def setUp(self):
self.fish_tank = FishTank()

مزیت:

  • کدهای آماده‌سازی را یک‌بار می‌نویسید
  • قبل از هر تست اجرا می‌شود

استفاده از tearDown

متد tearDown بعد از هر تست اجرا می‌شود و برای پاکسازی منابع استفاده می‌شود.

مثال:

def tearDown(self):
self.fish_tank.empty_tank()

مثلاً برای:

  • حذف فایل موقت
  • بستن اتصال دیتابیس
  • پاکسازی داده تست

جمع‌بندی

در این آموزش یاد گرفتید:

  • استفاده از unittest برای تست‌نویسی
  • تعریف کلاس TestCase
  • اجرای تست‌ها
  • تست Exception ها
  • استفاده از setUp
  • استفاده از tearDown

 

 

از همراهی شما با پارمین کلود متشکریم.

Click to rate this post!
[Total: 0 Average: 0]

نظرات کاربران

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *