Go:
כתיבת בדיקות
איך לעשות:
ב-Go, בדיקות בדרך כלל נכתבות באותו החבילה עם הקוד שהן בודקות. קבצים המכילים בדיקות מונמקים עם הסיומת _test.go
. בדיקות הן פונקציות שלוקחות כארגומנט מצביע לאובייקט של testing.T (מהחבילה testing
) והן מסמנות כשלון על ידי קריאה לשיטות כמו t.Fail()
, t.Errorf()
, וכו'.
דוגמה לבדיקה פשוטה עבור הפונקציה Add
המוגדרת ב-math.go
:
// math.go
חבילה math
פונקציה Add(x, y int) int {
תחזיר x + y
}
קובץ הבדיקה math_test.go
:
חבילה math
ייבוא "testing"
פונקציה TestAdd(t *testing.T) {
תוצאה := Add(1, 2)
צפוי := 3
אם תוצאה != צפוי {
t.Errorf("Add(1, 2) = %d; רוצים %d", תוצאה, צפוי)
}
}
הרץ את הבדיקות שלך עם הפקודה go test
באותה התיקייה עם קבצי הבדיקות שלך. פלט לדוגמה המציין בדיקה שעברה ייראה דומה ל:
PASS
ok example.com/my/math 0.002s
עבור בדיקות מבוססות טבלה, שמאפשרות לכם לבדוק באופן יעיל צירופים שונים של קלט ופלט, הגדירו פרוסה של מבנים המייצגים מקרי בדיקה:
פונקציה TestAddTableDriven(t *testing.T) {
var tests = []struct {
x int
y int
צפוי int
}{
{1, 2, 3},
{2, 3, 5},
{-1, -2, -3},
}
עבור _, tt := בטווח tests {
שםהבדיקה := fmt.Sprintf("%d+%d", tt.x, tt.y)
t.Run(שםהבדיקה, פונקציה(t *testing.T) {
ans := Add(tt.x, tt.y)
אם ans != tt.צפוי {
t.Errorf("קיבלו %d, רוצים %d", ans, tt.צפוי)
}
})
}
}
צלילה עמוקה
מסגרת הבדיקות של Go, שהוצגה ב-Go 1 יחד עם השפה עצמה, תוכננה להשתלב באופן חלק עם כלי העבודה של Go, משקפת את הדגש של Go על פשטות ויעילות בפיתוח תוכנה. בניגוד למסגרות בדיקות בשפות אחרות שנסמכות על ספריות חיצוניות או הגדרות מורכבות, החבילה testing
המובנית של Go מספקת דרך ישירה לכתוב ולהריץ בדיקות.
היבט מעניין בגישה של Go לבדיקות הוא העיקרון של עדיפות הקונבנציה על פני התצורה שהיא מאמצת, כמו דפוס השמת הקבצים (_test.go
) והשימוש בפונקציונליות של ספריית הסטנדרט במקום תלות בתלויות חיצוניות. הגישה המינימליסטית הזו מעודדת מפתחים לכתוב בדיקות, כאשר מחסום הכניסה נמוך.
למרות שמתקני הבדיקה המובנים של Go מכסים טווח רחב, ישנם תרחישים שבהם כלים או מסגרות של צד שלישי עשויים להציע יותר פונקציונליות, כמו יצירת mock, בדיקות fuzz, או בדיקות בסגנון התפתחות התנהגותית (BDD). ספריות פופולריות כמו Testify או GoMock משלימות את יכולות הבדיקה הסטנדרטיות של Go, ומציעות אסרטיביות מובעות יותר או יכולות יצירת mock, שיכולות להיות במיוחד שימושיות באפליקציות מורכבות עם הרבה תלויות.
למרות קיומם של אלטרנטיבות אלו, חבילת הבדיקה הסטנדרטית של Go נשארת אבן הפינה לבדיקות ב-Go בשל הפשטות, הביצועים והאינטגרציה ההדוקה עם השפה וכלי העבודה. בין אם מפתחים בוחרים להרחיב אותה עם כלים של צד שלישי או לא, מסגרת הבדיקות של Go מספקת בסיס מוצק להבטחת איכות הקוד ואמינותו.