یک برنامه نویس که هرآنچه را که یاد میگیرد در دفترچه یادداشت ویرگولیش یادداشت میکرد(!) حتی یک خط ! تا درصورت نیاز به آن رجوع کند...
انواع Test در سی شارپ
ما در سی شارپ 4 نوع تست برای کد ها داریم
- تست واحد Unit Test
- تست یکپارچه Integration Test
- تست رابط کاربری یا End-To-End
- تست خودکار
برای توسعه تست محور Test-Driven Development (TDD) دو روش وجود دارد
- نوشتن کد بعد نوشتن تست codefirst (این روش برای تازه کارها و کسانی که در حال یادگیری نوشتن تست هستند میباشد)
- دوم نوشتن تست و بعد نوشتن کد که در واقع TDD میباشد ابتدا تست نوشته میشود و سپس کد ها بر اساس تست نوشته میشود (red-green-refactor)
تست واحد Unit Test
نوشتن تست برای کلاس یا کلاس ها بدون وابستگی بطور مثال نوشتن تست برای کلاس x و متد های آن
قوت
سرعت اجرای سریع
ضعف
- هرچه پروژه بزرگتر و پیچیده تر میشود زمان نوشت تست ها بیشتر میشود
تست یکپارچه Integration Test
نوشتن تست برای کلاس یا کلاس ها با وابستگی خارجی بطور مثال نوشتن تست برای کلاس x و متد های آن بطوری کد های درون کلاس x به کلاس Y وابسته باشد. این نوع تست باید طوری نوشته شود که کلاس y نیز تست شود. یا بطور مثال کلاس x به دیتابیس وابسته است(استفاده از داده های آزمایشی mock)
تست رابط کاربری یا End-To-End
این نوع تست به این صورت است که داده های تست باید توسط کاربر از طریق UI وارد و آزمایش (تست) شود.
قوت
- داده ها به صورت دستی و توسط کاربر ثبت میشود (شبیه سازی برنامه نهایی)
ضعف
- سرعت اجرای کند به دلیل اینکه برای هر بار تست باید برنامه اجرا شود
- درصورت تغییر در UI باید تست هم تغییر کند مثلا input عددی به رشته ای تغییر کند
تست خودکار
این نوع تست ما کد را مینویسیم و function ها مستقیم فراخوانی میکنیم (صدا میزنیم) و با تایید (Verify) مقادیر مختلف مقدار درست را بر میگردانیم . تست خودکار تکرار پذیر است و در هر زمانی که کد تغییر دادیم یا هنگام ارسال به repository مثل git یا publish کردن می توانیم تست ها را اجرا کنیم . تمام تست کمتر از چند ثانیه اجرا خواهند شد.البته این نوع تست همان تست unit test می باشد توسط کتابخانه خارجی مانند Selenium به طور خودکار در میاید
قوت
اجرای مکرر تست ها در زمان کم
به دام انداختن باگ ها (Catch Bugs) قبل ازاستقرار برنامه
ریفکتور کردن با اطمینان (Refactoring) ریفکتور به معنای تغییر ساختار کد بدون تغییر در رفتار آن (مثلا تغییر نام یک متد یا جدا کردن بخشی از کد در یک متد جدید- تغییر ساختار برای تمیزتر کردن کد و قابلیت نگهداری بالاتر بدون تغییر عملکرد)
هرم تست بر اساس کارایی و میزان به کارگیری آن در یک پروژه
نحوه نام گذاری کلاس و متد های تست
برای کلاس ها
نام کلاسی که می خواهیم برای آن تست بنویسیم + کلمه Tests
MyClassTests
برای متد ها
نام متد + سناریو آن متد + رفتار مورد نظر متد و جدا کردن بخش ها با _
MyMethodName_Senario_ExpectedBehavior()
بطور مثال
CanBeCancelledBy_AdminCancelling_ReturnTrue()
CanBeCancelledBy_SameUserCancelling_ReturnTrue()
CanBeCancelledBy_AnotherUserCancelling_ReturnFalse()
مطلبی دیگر از این انتشارات
قرص معجزه آسا
مطلبی دیگر از این انتشارات
پنج نکته که پس از حل کردن 500 سوال لیتکد آموختم
مطلبی دیگر از این انتشارات
نکاتی در مورد ماکرو ها در سی / سی ++