۶ میلیون تومن هدیه🎁 + کلی آفر جذاب در کمپین تابستون🔥 تابستون کوتاهه پس بزن بریم 👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ محسن محمدخانی
بررسی نقض SOLID در تست نویسی
جامعه مهندسی نرم افزار ایجاد شده در ۰۸ خرداد ۱۴۰۱

سلام 

آیا در تست نویسی باید از نقض قوانین SOLID جلوگیری کنیم؟

مثلا من یک تست Integration نوشتم که داخلش داره یکی از کلاس‌ها برنامه من new میکنه و متد هاشو فراخوانی میکنه

خوب شما میدونید که new یک کلاس یک مسئولیت جدیده و قانون SRP نقض میکنه و برای حل این مشکل از الگوطراحی Factory استفاده میشه

من برای اون کلاس داخل کد برنامه factory ساختم اما داخل تستک بصورت new ازش یک نمونه گرفتم

آیا باید برای اون کلاس در حالت تست باید factory بسازم؟

public function test_register_user_when_user_exist_show_exception() {
    $this->expectException(HttpResponseException::class);
    $userRegisterWithCredential = new UserRegisterWithCredential();
    $userData = [
      "email" => "mohsengla@gmail.com"
    ];
    $userRegisterWithCredential->register($userData);
    $userRegisterWithCredential->register($userData);
  }

سلام. یک موردی رو بهش باید توجه بکنید که ایجاد کردن کلاس‌ها به صورت new همیشه ناقض SRP نمی‌تونه باشه. اگر خیلی دقیق بخوایم بگیم کلاس هایی که ساختن اونها کمی پیچیده میشه و معمولا کدهای اضافه ای باید نوشته بشه که مثلا اون کلاس رو config کنه یا داده‌های رو به سازنده اش ارسال کنه می‌تونن SRP رو نقض کنن و اونجا کلاس‌های فکتوری وارد کار میشن. در تست‌ها هم new کردن کلاس‌ها مشکلی ایجاد نمیکنه و گاها هم اگر ایجاد کردن این کلاس‌ها به دفعات تکرار بشه میشه از delegation برای این مورد استفاده کرد. ساختن کلاس‌ها و آبجکت‌های اونها در تست‌ها رو بهش می‌گیم fixture setup و ما روش‌های مختلفی برای این مورد داریم. در نهایت اون new کردن اگر تکی باشه و خیلی تکرار نشه مشکلی در تست‌ها به وجود نمیاره.

بهترین پاسخ
کیوان علی محمدی ۰۹ خرداد ۱۴۰۱، ۰۹:۰۶