تست برای تست

چطور تستی که برای تست کردن اجزای کد نوشتیم رو تست کنیم و مطمئن بشیم درسته؟ یک راه حل ساده اما موثر برای اطمینان از صحت تست‌های نرم‌افزاری

مساله

برای تست کردن اجزای کد، Unit Test می‌نویسیم. اما برای تست کردن کد خود تست‌ها چه کنیم؟

این مساله چه زمانی ایجاد می‌شه؟ وقتی که تست‌ها رو بعد از نوشتن کد اصلی بخواهیم اضافه کنیم. در واقع اگر به روش‌هایی نظیر TDD استفاده کنیم و تست‌ها رو قبل از نوشتن کد اصلی نوشته باشیم احتمال مشکل در تست‌ها به شدت پایین میاد. اما وقتی یک Legacy Code داریم که احتمالاً تستی هم نداره، این مساله خیلی جدیه. چرا؟ چون ممکنه برای منطق اشتباهی تست بنویسیم یا تستی که می‌نویسیم به دلیل باگ همیشه pass بشه. حالا راه حل چیه؟

راه حل

یک راه ساده و شاید تا حدی بدیهی اینه که بعد از نوشتن تست و اطمینان از pass شدنش، کد رو تغییر بدیم و اون بخشی از کد که باعث pass شدن تست می‌شه رو کامنت کنیم یا کاری کنیم که نتیجه متفاوتی برگردونه. در این حالت باید تست fail بشه، اما اگر تست همچنان pass ‌می‌شد معنیش اینه که تستی که نوشتیم باگ داره.

هر چند در Code Review احتمالاً خیلی از مشکلات کدهامون رو توسط همکاران دیگه متوجه می‌شیم اما خوبه که بتونیم اطمینان از تست‌ها رو به روشی مثل همینی که بالاتر گفتم بیشتر کنیم. شما چه راه‌حلی به نظرتون می‌رسه؟