ترکیبپذیری تستها؛ ایدهای فراتر از ایزوله بودن
خلاصهٔ کاملتر
نویسنده از «Test Desiderata» (فهرست خواص تست خوب) دو مورد رو کنار هم میذاره: ایزوله بودن یعنی هر تست خودش فیکسچرشو از صفر میسازه و نتیجهش به ترتیب اجرای بقیهی تستها ربطی نداره. ترکیبپذیری اما فرق داره؛ یعنی وقتی چند تا تست ایزوله رو کنار هم اجرا میکنی، مجموعشون باید بهت اطمینان بده، حتی اگه هیچکدوم بهتنهایی همهچیز رو پوشش نده.
مثال نویسنده اینه: یه تست ساده مینویسی که یه متد رو چک میکنه، بعد برای فیچر بعدی همون تست رو کپی میکنی و یه اسرشن جدید بهش اضافه میکنی. اگه این کارو چندبار تکرار کنی، آخرش یه تست طولانی و سختخون داری که اگه تست اول fail بشه، تست دوم هم قطعاً fail میشه، یعنی تکراریه. نویسنده میگه بهجای نگهداشتن هر دو تست یا حذف تست اول، بهتره تست دوم رو ترکیب کنی: بخش تکراریش رو حذف کن و فقط چیزی که تست اول چک نمیکنه رو نگه دار. اینجوری هم پوشش تست از دست نمیره هم مشخصتر میشه کدوم تست دقیقاً چی رو خراب کرده.
برای نشون دادن مقیاس، نویسنده یه مثال میزنه: اگه ۴ روش محاسبهٔ سود و ۵ روش گزارشگیری از اون سود داشته باشی، حالت brute-force به ۲۰ تا تست نیاز داره؛ ولی اگه محاسبه و گزارشگیری رو جدا از هم تست کنی و فقط یه تست برای نشون دادن اتصال درستشون بنویسی، با ۱۰ تا تست به همون اطمینان میرسی. به گفتهٔ نویسنده این روش تستها رو سریعتر، خواناتر، مشخصتر و کمحساستر به تغییرات ساختاری میکنه؛ هرچند بعضی توسعهدهندههای باتجربه اولش با ترس بهش واکنش نشون میدن، چون فکر میکنن کم کردن اسرشنها یعنی ضعیف کردن تست.
نکات کلیدی:
- Test Desiderata دو خاصیت جدا تعریف میکنه: ایزوله بودن (استقلال هر تست) و ترکیبپذیری (اطمینان مجموع تستها)
- الگوی رایج کپی-پیست-اکستند تستها، تستهای تکراری و سختخون تولید میکنه
- راهحل: تست بعدی رو فقط برای چیزی بنویس که تستهای قبلی چک نمیکنن، نه از صفر همهچیز رو تکرار کن
- مثال محاسبه/گزارش سود: با تفکیک درست، ۲۰ تست brute-force به ۱۰ تست ترکیبی کاهش پیدا میکنه




