در توسعه نرمافزار، تست از اهمیت بالایی برخوردار میباشد. تصور کنید درتستهایی که مینویسید، تست شما وابسته به یکی از ماژولها، فانکشنها و یا بخشی از برنامه باشد، که آن بخش هنوز توسعه داده نشده، و به هر طریق، آن بخش در لحظه فعلی برای شما قابل استفاده نیست.
در این شرایط از چه امکانی در تستنویسی میتوان استفاده کرد ؟
اِستابها (Stubs)
اِستابها در واقع شبیهسازیای از قطعه کد، فانکشن، ماژول و یا هر بخشی از برنامه شما هستند که تستی که مینویسید به آن وابسته است، و این ماژول واقعا برنامهنویسی نشده و کار شما را متوقف کرده است.
برای نمونه تصور کنید دو ماژول در برنامه شما وجود دارد. ماژول اول Login و ماژول دوم Dashboard نام دارد و منطق برنامه به این صورت است که پس از لاگین شدن کاربر، باید به صفحه Dashboard هدایت شود.
حال فرض کنید توسعهی ماژول Login تمام شده و برای تست شدن به وجود ماژول Dashboard نیاز دارد؛ اما ماژول Dashboard هنوز توسعه داده نشده و آماده استفاده نمیباشد.
در این شرایط برنامهنویس با نوشتن قطعه کدی، وجود صفحه Dashboard را شبیهسازی میکند تا بتواند ماژول Login را تست کند.
<?php class DashboardTest { public function show() { return 'dashboard is ready'; } } class UserTest { public function testIfLoginWorksFine() { $userData = [ 'username' => 'mehrad', 'password' => 'secret' ]; $response = $this->post('login', $userData); $response->assertSee('dashboard is ready'); } }
در این سناریو، Dashboard نوشته شده در واقع یک Stub است.
اِستابها در واقع در تستهای به اصطلاح بالا به پایین استفاده میشوند.
تستهای بالا به پایین به تستهایی گفته میشود که در آنها ماژولهای سطح پایینتر که هنوز توسعه داده نشدهاند را شبیهسازی میکنیم، در حالیکه توسعهی ماژولهای سطح بالا تمام شده است.
درایوِرها (Drivers)
درایوِرها شباهت زیادی به استابها دارند؛ به این معنی که درایورها نیز در واقع شبیهسازیای از قطعه کد، فانکشن، ماژول و یا هر بخشی از برنامه شما هستند که تستی که مینویسید به آن وابسته است، و این ماژول واقعا برنامهنویسی نشده و کار شما را متوقف کرده است.
اما تفاوت آن با استاب در این است که در تستهای به اصطلاح پایین به بالا مورد استفاده قرار میگیرند.
تستهای پایین به بالا به تستهایی گفته میشود که در آنها ماژولهای سطح بالاتر که هنوز توسعه داده نشدهاند را شبیه سازی میکنیم، در حالیکه توسعهی ماژولهای سطح پایین تمام شده است.