چرا بعضی Unit Testها به هیچ دردی نمی خورن؟
تا حالا براتون پیش اومده که بعد از کلی وقت گذاشتن روی نوشتن تست های واحد، بازم سیستم با یه باگ ناجور منفجر بشه؟ اون حس ناامیدی که انگار همه اون تست ها فقط وقت تلف کردن...
خب، چرا این اتفاق می افته؟
یه سری اشتباهات رایج باعث می شه تست ها بی اثر بشن. مثلا:
استفاده از داده های واقعی به جای داده های ساختگی:
فکر کنید تست تون روی دیتابیس واقعی اجرا بشه. اگه رکوردها تغییر کنن یا دسترسی به دیتابیس قطع بشه، تست می ترکه. تست خوب باید مستقل از محیط باشه.
عدم استفاده از Mocking:
وقتی همه وابستگی های کد واقعی باشن، دارین کل سیستم رو تست می کنید، نه فقط یه بخش خاص رو. این دیگه Unit Test نیست! استفاده از Mock باعث می شه به جای اینکه به API واقعی یا دیتابیس وصل بشید، شبیه ساز اون ها رو تست کنید.
نوشتن تست های زیاد ولی بدون هدف مشخص:
یه زمانی فکر می کردم هرچی تعداد تست ها بیشتر باشه بهتره. بعد فهمیدم تستی که هدفمند نباشه، فقط کد رو شلوغ می کنه و باعث می شه موقع تغییرات کلی مشکل زا بشه.
حالا راه حل چیه؟
۱. وابستگی ها رو Mock کنید. با ابزارهایی مثل Mockito می تونید رفتار وابستگی ها رو شبیه سازی کنید.
۲. از داده های ثابت و ساختگی (Fake Data) استفاده کنید که تغییر نمی کنن.
۳. روی سناریوهای کلیدی تمرکز کنید. مثلا یه تابع مهم چطوری ورودی های خاص رو هندل می کنه؟ این مهم تر از اینه که صد تا تست بنویسید که همشون بی هدف باشن.
@DevTwitter | <Hamed Farzanefar/>