Menu
Coddy logo textTech

בדיקות ואינטגרציה

חלק מהיחידה תכנות מונחה עצמים במסלול ה-GO של Coddy. שיעור 104 מתוך 107.

challenge icon

אתגר

קל

בואו נסגור מעגל במערכת ניהול הספרייה שלנו על ידי כתיבת בדיקות שיוודאו שהכול עובד כראוי! תיצרו קובץ בדיקות שיאמת את פונקציונליות הליבה של הספרייה שלכם: יוודא שאפשר לשאול ולהחזיר ספרים כראוי, ושמצבי שגיאה מטופלים כראוי.

תארגנו את הקוד שלכם בחמישה קבצים:

  • book.go: המבנה Book שלכם, עם השדות ID, Title, Author, ISBN ו-Available. כללו את הבנאי NewBook, שמאתחל ספרים כזמינים.
  • user.go: המבנה User שלכם, עם השדות ID, Name, Email ו-BorrowedBooks. כללו את הבנאי NewUser.
  • library.go: המבנה Library שלכם, עם מפות לספרים ולמשתמשים, וכן המתודות NewLibrary, AddBook, AddUser, Borrow ו-Return. המתודה Borrow צריכה להחזיר שגיאות עבור משתמש לא תקף, ספר לא תקף או ספר שאינו זמין. המתודה Return צריכה להחזיר שגיאות עבור משתמש לא תקף, ספר לא תקף או ספר שלא הושאל.
  • library_test.go: כאן תכתבו את פונקציות הבדיקה שלכם! צרו בדיקות שיוודאו:
    • TestBorrowSuccess: ודאו שהשאלת ספר זמין מצליחה (לא מוחזרת שגיאה), הספר הופך ללא זמין ומזהה הספר מתווסף לרשימת הספרים שהמשתמש שאל
    • TestBorrowUnavailable: ודאו שניסיון לשאול ספר שכבר הושאל מחזיר שגיאה
    • TestBorrowInvalidUser: ודאו שניסיון לשאול ספר עם מזהה משתמש שאינו קיים מחזיר שגיאה
    • TestReturnSuccess: ודאו שהחזרת ספר שהושאל מצליחה, הספר הופך שוב לזמין ומזהה הספר מוסר מרשימת הספרים שהמשתמש שאל

    כל בדיקה צריכה להגדיר ספרייה משלה עם הספרים והמשתמשים הדרושים, לבצע את הפעולה ולבדוק את התוצאות באמצעות t.Error או t.Errorf כשהבדיקות נכשלות.

  • main.go: הריצו את הבדיקות שלכם באופן ידני ודווחו על התוצאות. קראו את שם הבדיקה להרצה (borrow_success, borrow_unavailable, borrow_invalid_user או return_success). בהתאם לשם הבדיקה, הגדירו את התרחיש המתאים והדפיסו PASS אם כל הבדיקות עוברות, או FAIL: [reason] אם בדיקה כלשהי נכשלת.

הקלט הבא יסופק:

  • שם בדיקה: borrow_success, borrow_unavailable, borrow_invalid_user או return_success

עבור כל בדיקה, השתמשו בנתוני הבדיקה הסטנדרטיים האלה:

  • ספר: מזהה B001, כותרת Go Programming, מחבר John Doe, ISBN 123-456
  • משתמש: מזהה U001, שם Alice, כתובת אימייל alice@test.com

לדוגמה, עבור הקלט:

borrow_success

הפלט שלכם צריך להיות:

PASS

ועבור הקלט:

borrow_unavailable

הפלט שלכם צריך להיות:

PASS

ועבור הקלט:

borrow_invalid_user

הפלט שלכם צריך להיות:

PASS

ועבור הקלט:

return_success

הפלט שלכם צריך להיות:

PASS

עבור borrow_success: צרו ספרייה, הוסיפו ספר ומשתמש, השאילו את הספר, ודאו שלא התקבלה שגיאה, ודאו שהספר אינו זמין, וודאו שהספר מופיע ברשימת הספרים שהמשתמש שאל.

עבור borrow_unavailable: צרו ספרייה, הוסיפו ספר ומשתמש, הגדירו את Available של הספר כ-false, נסו להשאיל אותו וודאו שמוחזרת שגיאה.

עבור borrow_invalid_user: צרו ספרייה, הוסיפו רק את הספר (ללא משתמש), נסו להשאיל אותו עם מזהה המשתמש U001 וודאו שמוחזרת שגיאה.

עבור return_success: צרו ספרייה, הוסיפו ספר ומשתמש, השאילו את הספר תחילה ואז החזירו אותו, ודאו שלא התקבלה שגיאה, ודאו שהספר שוב זמין, וודאו שרשימת הספרים שהמשתמש שאל ריקה.

כתיבת בדיקות מבטיחה שמערכת הספרייה שלכם מתנהגת כראוי ומעניקה לכם ביטחון לבצע שינויים בלי לפגוע בפונקציונליות הקיימת!

נסו בעצמכם

package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	testName, _ := reader.ReadString('\n')
	testName = strings.TrimSpace(testName)

	// נתוני בדיקה סטנדרטיים
	// ספר: ID "B001", כותרת "Go Programming", מחבר "John Doe", ISBN "123-456"
	// משתמש: ID "U001", שם "Alice", דוא״ל "alice@test.com"

	switch testName {
	case "borrow_success":
		// TODO: בדוק שהשאלת ספר זמין מצליחה
		// 1. צור ספרייה, הוסף ספר ומשתמש
		// 2. השאל את הספר
		// 3. ודא: אין שגיאה, הספר אינו זמין, והספר מופיע ברשימת המשתמש
		// הדפס "PASS" אם כל הבדיקות עברו, או "FAIL: [reason]" אם אחת מהן נכשלה
		fmt.Println("FAIL: not implemented")

	case "borrow_unavailable":
		// TODO: בדוק שהשאלת ספר שאינו זמין מחזירה שגיאה
		// 1. צור ספרייה, הוסף ספר ומשתמש
		// 2. הגדר את Available של הספר ל־false
		// 3. נסה לשאול את הספר
		// 4. ודא שמוחזרת שגיאה
		fmt.Println("FAIL: not implemented")

	case "borrow_invalid_user":
		// TODO: בדקו שהשאלת ספר עם משתמש לא תקין מחזירה שגיאה
		// 1. צרו ספרייה והוסיפו רק את הספר (ללא משתמש)
		// 2. נסו לשאול את הספר עם מזהה המשתמש "U001"
		// 3. ודאו שמוחזרת שגיאה
		fmt.Println("FAIL: not implemented")

	case "return_success":
		// TODO: בדקו שהחזרת ספר שהושאל מצליחה
		// 1. צור ספרייה, הוסף ספר ומשתמש
		// 2. שאלו תחילה את הספר
		// 3. החזירו את הספר
		// 4. ודאו: אין שגיאה, הספר זמין, רשימת הספרים של המשתמש ריקה
		fmt.Println("FAIL: not implemented")

	default:
		fmt.Println("FAIL: unknown test")
	}
}

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Go אונליין