چگونه تست های واحد خود را ساده کنیم؟

اگر به شما بگویم جادویی وجود دارد که می تواند تست های واحد شما را ساده کند، باورتان می شود؟
شما باید، زیرا این چیزی است که ما امروز با هم خواهیم دید، و این جادو نام دارد: تست های پارامتریک.
تست های پارامتری چیست؟
تستهای پارامتری، تستهای واحدی هستند که متغیرهایی را بهعنوان پارامتر به آنها تزریق میکنیم، که اجازه میدهد همان تست با زمینهای متفاوت دوباره پخش شود.
چگونه کار می کند؟
تصور کنید که می خواهید تابع زیر را آزمایش کنید:
def is_positif_strict(num_to_test: int) -> bool:
return num_to_test > 0
برای اینکه بتوانید آن را آزمایش کنید، باید یکی را ایجاد کنید:
- مجموعه ای از توابع با هر یک از موارد تست
- تابعی که تمام تست های شما را اجرا کرد
ما آن را پنهان نمی کنیم، راه حل اول کسل کننده است و قابلیت نگهداری را کاهش می دهد، راه حل دوم تشخیص اینکه کدام آزمون فرعی شکست خورده را برای شما دشوار می کند.
در حال حاضر، به لطف Pytest، فقط می توانید آزمایشات خود را به صورت زیر اعلام کنید
import pytest
testdata = [
(-1, False),
(0, False),
(1, True),
]
@pytest.mark.parametrize("num_to_test, expected", testdata)
def test_is_positif_strict(num_to_test, expected):
assert is_positif_strict() == expected
در مثال قبلی، حاشیه نویسی را می بینیم @pytest.mark.parametrize
با دو پارامتر اضافه شود:
- رشته ای حاوی لیستی از نام متغیرها برای تزریق
- آرایه ای حاوی تمام متغیرهایی که باید تزریق شوند
وقتی به آنجا می رسید، اگر تست های خود را برای هر مورد بازنویسی کنید، شاهد بهبود و ساده سازی کد خود خواهید بود.
کسانی که قبلاً می توانستند یک آرایه بسازند و روی آن در یک تابع حلقه بزنند، در اینجا چیزی است که برای شما به ارمغان می آورد: دید.
این به این دلیل است که برخلاف حلقه زدن از طریق روش آزمایش شما، هر یک از تزریقها این کار را انجام خواهند داد تولید یک آزمون واحد اختصاصی. بنابراین، اگر 40 مورد مختلف برای آزمایش داشته باشید، 40 تست واحد در گزارش شما ایجاد می کند. زمانی که یکی از این تست ها شروع به شکست می کند بسیار مفید است.
برای کسانی که هنوز متقاعد نشدهاند، به روشهای حاوی regex فکر کنید. اینها هنوز روشهایی هستند که موارد زیادی برای آزمایش وجود دارد. بنابراین، چنین ابزاری زندگی شما را تا حد زیادی تسهیل می کند.
اگر از پایتون استفاده نمی کنید، توجه داشته باشید که انجام همین کار در جاوا یا Go امکان پذیر است. (بدیهی است که نه با همان کتابخانه) بنابراین اگر به این کار علاقه دارید، باید نحوه انجام آن را به راحتی پیدا کنید.
امیدوارم این بتواند به تو کمکی کند! 🍺