تو پست آیا برنامه نویس باید کدهاشو تست کنه؟؟؟ لزوم نوشتن و انجام تست توسط برنامه نویس رو بررسی کردیم. تو این پست و چند پست آینده انواع تست هایی که باید توسط برنامه نویس اجرا بشه رو بررسی میکنیم.
تست واحد چیست ؟؟؟
ایده اصلی تست واحد یا همون Unit test حصول اطمینان از کارکرد صحیح کلاسی است که در حال توسعه آن هستیم. به این صورت که اگر داده مشخصی را به عنوان ورودی در واحد تحت تست وارد کنیم، خروجی مشخص مورد انتظار را به عنوان خروجی دریافت خواهیم کرد. یا اگر ورودی نا مربوطی وارد کنیم، خطایی مطابق انتظار پاسخ میگیریم. پس با تست واحد از رفتار مورد انتظار واحد تحت تستمون مطمین میشویم.
اما نکته مهم اینجاست که برای اطمینان از اینکه واحد تحت تست در هر شرایط و هر محیطی کار میکنه، کلاس ها باید به صورت ایزوله تست شوند. یعنی هنگام نوشتن unit test فقط یک کلاس را تست کنید نه بیشتر. بعد از اینکه مطمین شدید کدتان به درستی کار میکند، تعامل آن قطعه با سایر اجزای سیستم را تست کنید. ولی ابتدا روی تست واحد تمرکز کنید.
برخی افراد تنها به این دلیل که تستهایشان را در فریمورک های تست واحد اجرا می کنند تمام تست هایشان را تست واحد میدانند. برخی دیگر با نوشتن تستهایی که در برگیرنده لایه های مختلف است با این فرض که این لایه ها در اصل یک واحد بزرگ را تشکیل میدهند به خیال خود unit test مینویسند.
در کتاب A set of Unit Testing Rules که توسط Michael Feathers نوشته شده آمده :
تست نوشته شده اگر شرایط زیر را داشته باشد تست واحد نیست :
1. با دیتابیس ارتباط برقرار کند.
2. با شبکه ارتباط برقرار کند.
3. با فایل سیستم سر و کار داشته باشد.
4. برای اجرای آن نیاز به اعمال تنظیمات(افزودن یا تغییر فایل های کانفیگ) داشته باشید.
تست های واحد مشخصه هایی داردند که آنها را از سایر تست های برنامه نویس مجزا میکنند. همانطور که گفته شد این تست ها بر روی یک کلاس متمرکز میشوند و از آنجا که معمولا کوچک هستند سریع اجرا میشوند. همچنین محل باگ ها را شناسایی کرده و به سرعت و با دقت بالا برنامه نویس را به خطی که کد خطا دار نوشته شده است هدایت می کند و به این ترتیب به برنامه نویس کمک میکند تا قبل از پخش شدن باگ در سیستم آن را رفع کند.
اگر تست های واحدی که نوشته اید تمام کلاسهایتان را به طور کامل پوشش داده باشند، در هر زمان بدون ترس می توان کد ها را ریفکتور کرد وهیچ کدی که جرعت تغییر دادنش رو نداشته باشید وجود نخواهد داشت.
مزیت دیگر این تست ها داشتن یک مستند گویا و به روز از کدهایمان هست. تست های واحد بسیار راحت تر و سریع تر از داکیومنت ها و کامنت های موجود در کد فهمیده میشوند.
در آخر یادمون باشه که تست های واحد وظیفه و ابزار برنامه نویسان هستند که اگر به صورت درست انجام شوند مایع افتخار و نشانه حرفه ای بودن برنامه نویس میباشد.