Menu
CoddyTech

Kiểm thử đơn vị (NUnit/xUnit)

Thuộc phần Lập trình hướng đối tượng trong hành trình C# của Coddy. Bài học 67 trên 70.

challenge icon

Thử thách

Dễ

Hãy hoàn thiện dự án Library System bằng cách thêm các bài kiểm thử đơn vị! Kiểm thử rất quan trọng để đảm bảo code hoạt động chính xác và tiếp tục hoạt động đúng khi bạn thay đổi code. Bạn sẽ tạo một tệp kiểm thử riêng để xác minh các chức năng cốt lõi của hệ thống thư viện.

Bạn sẽ tiếp tục làm việc với cấu trúc dự án hiện có và thêm một tệp kiểm thử mới:

  • Book.cs: Giữ lớp Book với Id, Title, Author, IsAvailable cùng các phương thức Borrow() và Return().
  • User.cs: Giữ lớp User với chức năng theo dõi sách đang mượn, hằng số MaxBooks, phương thức CanBorrow() và các phương thức quản lý sách đang mượn.
  • Library.cs: Giữ lớp Library với logic mượn sách, các phương thức tìm kiếm và các phương thức GetAllBooks() cùng GetAllUsers().
  • LibraryTests.cs: Đây là tệp kiểm thử mới của bạn! Tạo một lớp kiểm thử để xác minh hệ thống thư viện hoạt động chính xác. Bạn sẽ viết các phương thức kiểm thử để kiểm tra nhiều tình huống và báo cáo từng bài kiểm thử đạt hay không đạt.
  • Program.cs: Điểm bắt đầu để chạy các bài kiểm thử và hiển thị kết quả.

Lớp kiểm thử của bạn nên có các phương thức kiểm tra những tình huống sau:

  • TestBookBorrow - Xác minh việc mượn một cuốn sách có sẵn thành công và làm thay đổi trạng thái sẵn có của sách
  • TestBookBorrowUnavailable - Xác minh việc mượn một cuốn sách đã được mượn sẽ thất bại như mong đợi
  • TestUserBorrowingLimit - Xác minh người dùng không thể mượn quá 3 cuốn sách
  • TestBookReturn - Xác minh việc trả một cuốn sách đã mượn hoạt động chính xác
  • TestSearchByAuthor - Xác minh việc tìm kiếm theo tác giả trả về đúng các cuốn sách

Mỗi phương thức kiểm thử nên trả về một giá trị boolean cho biết bài kiểm thử có đạt hay không. Tạo một trình chạy kiểm thử đơn giản để chạy tất cả các bài kiểm thử và in kết quả.

Bạn sẽ nhận đầu vào sau:

  • Số lượng tình huống kiểm thử cần chạy (từ 1 đến 5, tương ứng với các bài kiểm thử ở trên)

Với mỗi bài kiểm thử được chạy, hãy in kết quả theo định dạng:

{TestName}: {PASS|FAIL}

Sau khi tất cả bài kiểm thử hoàn tất, hãy in phần tổng kết:

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

Ví dụ, nếu đầu vào là:

3

Đầu ra sẽ là:

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

Ví dụ khác với cả 5 bài kiểm thử:

5

Đầu ra sẽ là:

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

Các bài kiểm thử nên tạo các instance mới của Book, User và Library cho mỗi lần kiểm thử để đảm bảo chúng độc lập. Như vậy, trạng thái của bài kiểm thử này sẽ không ảnh hưởng đến bài kiểm thử khác. Hãy xem mỗi bài kiểm thử như một lần xác minh độc lập cho một hành vi cụ thể trong hệ thống của bạn!

Tự làm thử

using System;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Đọc số lượng bài kiểm tra cần chạy
            int numTests = Convert.ToInt32(Console.ReadLine());

            // TODO: Tạo đối tượng LibraryTests và chạy numTests bài kiểm tra đầu tiên
        }
    }
}

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch C# online