מבחן הזהב

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 . יש לבדוק את ההבדל המתקבל לשינויים בלתי צפויים.