تست طلایی

TFF شامل یک کتابخانه کوچک به نام golden است که نوشتن و نگهداری تست های طلایی را آسان می کند.

تست های طلایی چیست؟ چه زمانی باید از آنها استفاده کنم؟

تست‌های طلایی زمانی استفاده می‌شوند که می‌خواهید یک توسعه‌دهنده بداند که کد آنها خروجی یک تابع را تغییر داده است. آن‌ها بسیاری از ویژگی‌های تست‌های واحد خوب را نقض می‌کنند، زیرا به جای آزمایش مجموعه خاصی از ویژگی‌های واضح و مستند، وعده‌هایی درباره خروجی‌های دقیق توابع می‌دهند. گاهی اوقات مشخص نیست که چه زمانی تغییر در یک خروجی طلایی "منتظر" است یا اینکه آیا این تغییر خاصیتی است که آزمایش طلایی برای اجرای آن انجام شده است. به این ترتیب، معمولاً یک آزمون واحد با فاکتور مناسب به یک آزمون طلایی ارجحیت دارد.

با این حال، تست‌های طلایی می‌توانند برای اعتبارسنجی محتوای دقیق پیام‌های خطا، تشخیص یا کد تولید شده بسیار مفید باشند. در این موارد، تست‌های طلایی می‌تواند یک بررسی اطمینان مفید باشد که هرگونه تغییر در خروجی تولید شده «درست به نظر می‌رسد».

چگونه با استفاده از golden تست بنویسم؟

golden.check_string(filename, value) نقطه ورودی اولیه به کتابخانه golden است. رشته value در برابر محتویات فایلی که آخرین عنصر مسیر آن filename است بررسی می کند. مسیر کامل filename باید از طریق آرگومان خط فرمان --golden <path_to_file> ارائه شود. به طور مشابه، این فایل‌ها باید با استفاده از آرگومان data در قانون py_test BUILD در دسترس آزمایش‌ها قرار گیرند. از تابع location برای ایجاد یک مسیر نسبی مناسب استفاده کنید:

py_string_test(
  ...
  args = [
    "--golden",
    "$(location path/to/first_test_output.expected)",
    ...
    "--golden",
    "$(location path/to/last_test_output.expected)",
  ],
  data = [
    "path/to/first_test_output.expected",
    ...
    "path/to/last_test_output.expected",
  ],
  ...
)

طبق قرارداد، فایل‌های طلایی باید در دایرکتوری خواهر و برادری با همان نام هدف آزمایشی خود، با پسوند _goldens قرار داده شوند:

path/
  to/
    some_test.py
    some_test_goldens/
      test_case_one.expected
      ...
      test_case_last.expected

چگونه فایل های .expected را به روز کنم؟

فایل های .expected را می توان با اجرای هدف آزمایشی تحت تأثیر با آرگومان های --test_arg=--update_goldens --test_strategy=local به روز کرد. تفاوت حاصل باید برای تغییرات پیش بینی نشده بررسی شود.