Menu
Coddy logo textTech

בדיקות יחידה (NUnit/xUnit)

חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 67 מתוך 70.

challenge icon

אתגר

קל

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

תמשיך לעבוד עם מבנה הפרויקט הקיים שלך, ותוסיף קובץ בדיקות חדש:

  • Book.cs: השאר את המחלקה Book שלך עם Id,‏ Title,‏ Author,‏ IsAvailable, ועם המתודות Borrow() ו-Return().
  • User.cs: השאר את המחלקה User שלך עם מעקב השאלות, הקבוע MaxBooks,‏ CanBorrow(), ומתודות לניהול ספרים שאולים.
  • Library.cs: השאר את המחלקה Library שלך עם לוגיקת השאלה, מתודות חיפוש, והמתודות GetAllBooks() ו-GetAllUsers().
  • LibraryTests.cs: זהו קובץ הבדיקות החדש שלך! צור מחלקת בדיקות שמוודאת שמערכת הספרייה שלך פועלת כראוי. תכתוב מתודות בדיקה שבודקות תרחישים שונים ומדווחות אם כל בדיקה עברה או נכשלה.
  • Program.cs: נקודת הכניסה שלך, שמריצה את הבדיקות ומציגה את התוצאות.

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

  • TestBookBorrow - ודא שהשאלת ספר זמין מצליחה ומשנה את זמינותו
  • TestBookBorrowUnavailable - ודא שהשאלת ספר שכבר הושאל נכשלת כראוי
  • TestUserBorrowingLimit - ודא שמשתמשים אינם יכולים לשאול יותר מ-3 ספרים
  • TestBookReturn - ודא שהחזרת ספר שאול פועלת כראוי
  • TestSearchByAuthor - ודא שחיפוש לפי מחבר מחזיר את הספרים הנכונים

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

תקבל את הקלטים הבאים:

  • מספר תרחישי הבדיקה להרצה (1-5, בהתאם לבדיקות המפורטות למעלה)

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

{TestName}: {PASS|FAIL}

לאחר שכל הבדיקות יסתיימו, הדפס סיכום:

--- Test Summary ---
Passed: {count}
Failed: {count}
Total: {count}

לדוגמה, אם הקלט הוא:

3

הפלט צריך להיות:

TestBookBorrow: PASS
TestBookBorrowUnavailable: PASS
TestUserBorrowingLimit: PASS
--- Test Summary ---
Passed: 3
Failed: 0
Total: 3

דוגמה נוספת עם כל 5 הבדיקות:

5

הפלט צריך להיות:

TestBookBorrow: PASS
TestBookBorrowUnavailable: PASS
TestUserBorrowingLimit: PASS
TestBookReturn: PASS
TestSearchByAuthor: PASS
--- Test Summary ---
Passed: 5
Failed: 0
Total: 5

הבדיקות שלך צריכות ליצור מופעים חדשים של Book,‏ User ו-Library עבור כל בדיקה, כדי להבטיח בידוד. כך המצב מבדיקה אחת לא ישפיע על בדיקה אחרת. חשוב על כל בדיקה כעל אימות עצמאי של התנהגות מסוימת במערכת שלך!

נסו בעצמכם

using System;
using System.Collections.Generic;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Read library name
            string libraryName = Console.ReadLine();
            
            // Create a Library instance with the library name
            Library library = new Library(libraryName);
            
            // Read number of commands
            int numCommands = Convert.ToInt32(Console.ReadLine());
            
            // Process commands
            for (int i = 0; i < numCommands; i++)
            {
                string commandLine = Console.ReadLine();
                string[] parts = commandLine.Split('|');
                string command = parts[0];
                
                if (command == "ADD_BOOK")
                {
                    string bookId = parts[1];
                    string bookTitle = parts[2];
                    string bookAuthor = parts[3];
                    
                    Book book = new Book(bookId, bookTitle, bookAuthor);
                    library.AddBook(book);
                    Console.WriteLine($"Added: {bookTitle}");
                }
                else if (command == "ADD_USER")
                {
                    string userName = parts[1];
                    int memberId = Convert.ToInt32(parts[2]);
                    
                    User user = new User(userName, memberId);
                    library.RegisterUser(user);
                    Console.WriteLine($"Registered: {userName}");
                }
                else if (command == "BORROW")
                {
                    string bookId = parts[1];
                    int memberId = Convert.ToInt32(parts[2]);
                    
                    string result = library.BorrowBook(bookId, memberId);
                    Console.WriteLine(result);
                }
                else if (command == "RETURN")
                {
                    string bookId = parts[1];
                    int memberId = Convert.ToInt32(parts[2]);
                    
                    string result = library.ReturnBook(bookId, memberId);
                    Console.WriteLine(result);
                }
                else if (command == "SEARCH")
                {
                    string searchType = parts[1];
                    List<Book> results = new List<Book>();
                    
                    if (searchType == "title")
                    {
                        string searchValue = parts[2];
                        results = library.SearchByTitle(searchValue);
                    }
                    else if (searchType == "author")
                    {
                        string searchValue = parts[2];
                        results = library.GetBooksByAuthor(searchValue);
                    }
                    else if (searchType == "available")
                    {
                        results = library.GetAvailableBooks();
                    }
                    else if (searchType == "borrowed")
                    {
                        results = library.GetBorrowedBooks();
                    }
                    
                    if (results.Count == 0)
                    {
                        Console.WriteLine("No books found");
                    }
                    else
                    {
                        foreach (Book book in results)
                        {
                            Console.WriteLine($"{book.Title} by {book.Author}");
                        }
                    }
                }
                else if (command == "STATUS")
                {
                    List<Book> allBooks = library.GetAllBooks();
                    List<Book> availableBooks = library.GetAvailableBooks();
                    List<User> allUsers = library.GetAllUsers();
                    List<Book> borrowedBooks = library.GetBorrowedBooks();
                    
                    Console.WriteLine("--- Library Status ---");
                    Console.WriteLine($"Total Books: {allBooks.Count}");
                    Console.WriteLine($"Available: {availableBooks.Count}");
                    Console.WriteLine($"Total Users: {allUsers.Count}");
                    Console.WriteLine($"Books Borrowed: {borrowedBooks.Count}");
                }
            }
        }
    }
}

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

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