הבדיקות שלי, הבדיקות של הסוכן
כשסוכן קידוד כותב קוד הוא לא יכול לדעת אפילו שהתווים שהוא כותב הם קוד הגיוני. הוא לא יכול לדעת שהקוד נכתב בקבצים הנכונים או שהוא כותב בשפה הנכונה. בשביל סוכן קידוד הבדיקה היא דרך פשוטה להצליב נתונים, לכתוב את אותו קוד בכמה מקומות כדי לראות שמקבלים את אותה תוצאה.
ניקח קוד לדוגמה שהסוכן כתב ברובי:
module Activities
class ReadTranslatedActivity < Activity
include ActivityWithTokens
def activity_params
l2 = ordered_phrases.first.l2
{
phrases: ordered_phrases,
l2_rtl: l2.rtl,
}
end
end
end
הקוד מגדיר פונקציה אחת ללא פרמטרים בשם activity_params שמחזירה אוביקט שתלוי בתוצאה של פונקציה אחרת בשם ordered_phrases.
אותו סוכן שכתב את זה כתב לי גם בדיקה:
require "test_helper"
class Activities::ReadTranslatedActivityTest < ActiveSupport::TestCase
test "activity_params exposes only the translated phrases, no video" do
activity = Activities::ReadTranslatedActivity.new
language = Struct.new(:rtl).new(true)
phrase = Struct.new(:l2, :phrase_tokens).new(language, [])
activity.define_singleton_method(:ordered_phrases) { [phrase] }
params = activity.activity_params
assert_equal [phrase], params[:phrases]
assert params[:l2_rtl]
assert_nil params[:video_player]
end
end
הבדיקה משתלטת על אותה פונקציית מפתח ordered_phrases כדי שתחזיר משהו קבוע ועכשיו הוא מוודא שהאוביקט ש activity_params מחזירה מכיל פרמטרים מסוימים ולא מכיל פרמטרים אחרים.
אחרי שהבדיקה הזאת תעבור (חייבת לעבור. היא לא בודקת שום דבר מעניין). הפעם הבאה שנפגוש אותה תהיה כשהיא תיכשל בגלל שמישהו החליט לשנות את המימוש של activity_params, אולי להוסיף עוד מפתח או להוריד את אחד מהמפתחות. ואז נצטרך לשבור את הראש כדי להבין למה הבדיקה שם, מה הכשלון שלה מלמד אותנו ואם למישהו בכלל אכפת מזה.
הבדיקה שאני צריך הרבה יותר מעניינת. אני יודע שהמפתחות שיוצאים מ activity_params מגיעים לתבנית לתצוגה. אני רוצה לוודא שבהנתן ReadTranslatedActivity אקבל:
תבנית HTML שמרונדרת עם כל הנתונים הנכונים, גם בשפות שנכתבות מימין לשמאל וגם בשפות שנכתבות משמאל לימין.
מספר שאילתות חסום שלא קשור לכמה Phrases יש בפעילות.
מאחר והפונקציה לא תעבוד אם
ordered_phrasesמחזירה מערך ריק אני ארצה לוודא שנסיון לייצר ReadTranslatedActivity בלי phrases זורק שגיאה.
הדברים שאני רוצה לוודא ימשיכו להיות חשובים לא משנה איך נעדכן בעתיד את הקלאס או הממשקים הפנימיים. אם בדיקה שלי נכשלת זה סימן לבעיה אמיתית בקוד. אם הבדיקה של הסוכן נכשלת זה בסך הכל סימן שמישהו שינה התנהגות ועכשיו צריך לשנות את קוד הבדיקה.
הייתי רוצה למצוא דרך לשכנע את הסוכן לכתוב רק בדיקות מהסוג שאני אוהב ואני מודה שבינתיים לא היתה לי יותר מדי הצלחה במאבק הזה. מה שכן אני ממליץ אם גם הסוכנים שלכם כותבים בדיקות רק בשביל עצמם עדיף למחוק אותן לפני הקומיט. חבל על הטוקנים שנצטרך להשקיע בתחזוקה של כל הבדיקות המיותרות.