Test Double چیست بهمراه آموزش انواع Test Double

Test Double چیست بهمراه آموزش انواع Test Double

اگر اخیرا در توسعه پروژه خود از روش TDD - Test Driven Development استفاده کرده اید اهمیت unit test آشنا شدید و یک تست unit نوشتید احتمالا نیاز به تغییر مقدار برگردانده شده از یک متد یا جلوگیری از اجرای واقعی یک شی را احساس کردید. برای انجام کارهایی از این دست، test double ها که در این مطلب با آنها آشنا می شویم به کمک ما می آیند.

test double چیست؟

زمانی که برای یک متد از کلاسی، unit test می نویسیم احتمال اینکه آن متد به اشیا دیگری در برنامه ما وابسته باشد زیاد است. به عنوان مثال متد زیر را در نظر بگیرید.

public function someThing(A $a, B $b)
{
  // does something that needs to be tested
}

در مثال بالا واضح است که متد someThing به کلاس های A و B وابسته است و احتمالا کدی که داخل متد something می نویسیم متد هایی از این کلاس ها را صدا می زند. هنگام نوشتن تست برای متد something باید اشیائی ساختگی از کلاس های A و B را به آن بدهیم. چرا که هدف ما تست کردن کلاس های A و B نیست. به این اشیا ساختگی اصطلاحا test doubles گفته می شود.

به طور کلی می توان گفت test double شی ساختگی ای است که هنگام تست آن را به جای شی اصلی قرار می دهیم.

در ادامه با انواع test double ها آشنا خواهیم شد.

انواع test double ها

هنگامی که تست می نویسیم، به کلاس یا بخشی از برنامه که عملکرد آن را می خواهیم آزمایش کنیم System under test (سیستم مورد آزمایش) می گوییم. در اکثر مواقع این کلاس را هنگام تست نویسی تغییر نمی دهیم بلکه وابستگی های این کلاس است که با کمک test double ها تغییر می کند.

فریم ورک قدرتمند PHPUnit (برای آموزش این فریمورک میتوانید به دوره ی Unit Test مراجعه بفرمایید) در زبان PHP متد هایی برای ایجاد test double ها در اختیار ما قرار می دهد (https://phpunit.readthedocs.io/en/9.3/test-doubles.html). همچنین پکیج هایی مانند Mockery نیز برای انجام این کار وجود دارند. البته در اکثر مواقع نیازی به استفاده از آنها نیست. در این مطلب با استفاده از زبان PHP به راحتی انواع مختلف test double ها را می سازیم.

این بخش از محتوا مخصوص کاربرانی است که ثبت‌نام کرده‌اند.
جهت مشاهدهٔ این بخش از محتوا لاگین نمایید.

در این مطلب سعی شد انواع test double ها را با مثال های فرضی توضیح بدهیم. در بیشتر مواقع فریم ورک های تست نویسی مانند PHPUnit و پکیج های معروفی مثل Mockery این قابلیت ها را برای ما فراهم می کنند. اما درصورتی که نیازی به ایجاد آنها توسط خود ما باشد اکنون با دانش خود می توانیم آنها را بسازیم. در صورتی که ابهامی در بخش های این مطلب وجود دارد آن را در بخش نظرات با ما درمیان بگذارید.