درس 13 از 33
در حال پیشرفت

روش Given-When-Then برای نوشتن تست

خب راستش، وقتی یه کد می‌نویسیم، دوست داریم مطمئن بشیم که دقیقاً همون کاری رو می‌کنه که باید. یا مثلاً وقتی یه پروژه تیمی داریم، باید همه بدونن که یه بخش از برنامه چطوری کار می‌کنه.
روش Given-When-Then دقیقاً اینجا به  کمکمون میاد!

قدیما تست‌ها فقط یه سری کد بودن که بیشتر افراد تیم (غیر از برنامه‌نویس‌ها) نمی‌تونستن بفهمن. اما تو دنیای واقعی، تست‌ها فقط برای برنامه‌نویس نیستن. بقیه اعضای تیم مثل مدیر پروژه، طراح تجربه کاربری، یا حتی مشتری هم باید بفهمن برنامه دقیقاً چی کار می‌کنه.
روش Given-When-Then اومد تا این مشکل رو حل کنه:

  • ساده‌سازی تست‌ها: تست‌ها به جای کدهای پیچیده، به زبونی نزدیک به زبان طبیعی نوشته می‌شن.
  • درک مشترک: همه اعضای تیم می‌تونن تست‌ها رو بخونن و نظر بدن.
  • ارتباط تیمی بهتر: همه می‌فهمن برنامه چطور کار می‌کنه و انتظارشون از سیستم یکی می‌شه.

تاریخچه روش Given-When-Then

  • دهه 1990: ظهور تست‌های رفتارمحور (Behavior-Driven Development – BDD)
    این روش از دل رویکرد توسعه رفتارمحور (BDD) بیرون اومده. BDD در دهه ۹۰ میلادی توسط افراد خلاقی مثل دن نورث (Dan North) مطرح شد. ایده اصلی BDD این بود که تست‌ها و مستندات باید قابل‌فهم برای همه‌ی افراد تیم باشن، نه فقط برنامه‌نویس‌ها.

  • دهه 2000: معرفی GWT در BDD
    وقتی BDD جا افتاد، روش Given-When-Then به‌عنوان ابزاری برای نوشتن تست‌ها و سناریوها پیشنهاد شد. این روش به کمک دن نورث و توسعه‌دهندگان دیگه‌ای مثل لیز کیو (Liz Keogh) توسعه پیدا کرد. هدفشون ساده بود:

    • ایجاد یه زبان مشترک برای تیم‌ها.
    • کاهش پیچیدگی در توضیح رفتار سیستم‌ها.
  • استفاده در ابزارهای BDD
    بعدها ابزارهایی مثل Cucumber و SpecFlow به کار گرفته شدن تا این روش رو تو پروژه‌های مختلف استفاده کنن. اگه قبلاً اسم این ابزارها رو شنیدی، باید بدونی که Given-When-Then قلب تپنده‌شون بوده!

Given چیه؟

اینجا شرایط اولیه تعریف می‌شه. یعنی برنامه یا سیستم تو چه وضعیتی قرار داره. مثلاً:

  • داده‌هایی که آماده‌ست.
  • اتفاق‌هایی که قبلاً افتاده.
  • وضعیتی که قراره ازش شروع کنیم.

مثال:

«فرض کن یه بازی داریم که عددی تصادفی تولید می‌کنه و بازیکن‌ها قراره اون رو حدس بزنن.»

When چیه؟

وقتی که یه اکشن (عمل) انجام بشه. اینجا توضیح می‌دیم چه اتفاقی قراره بیفته یا چه کاری کاربر انجام می‌ده. مثلاً:

  • دکمه‌ای کلیک می‌شه.
  • تابعی اجرا می‌شه.
  • یه ورودی به برنامه داده می‌شه.

مثال:

«وقتی بازیکن یه عدد رو حدس می‌زنه و عددش رو ثبت می‌کنه.»

Then چیه؟

حالا باید نتیجه‌ی اون عمل رو توضیح بدیم. این بخش خروجی یا نتیجه‌ای رو که انتظار داریم، نشون می‌ده.

  • چه چیزی برمی‌گرده؟
  • چه اتفاقی توی سیستم می‌افته؟
  • چه تغییری اعمال می‌شه؟

مثال:

«اگه عدد حدس بازیکن درست باشه، بازی اعلام می‌کنه که اون برنده شده.»