Menu
CoddyTech

单元测试(NUnit/xUnit)

本课属于 Coddy C# 学习旅程的“面向对象编程”单元。第 67 课,共 70 课。

challenge icon

挑战

简单

为 Library System 项目添加单元测试,完成这个项目!测试对于确保代码正常运行,并在你修改代码后继续正常运行至关重要。你将创建一个专用的测试文件,用来验证图书馆系统的核心功能。

你将继续使用现有的项目结构,并添加一个新的测试文件:

  • 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;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // 读取要运行的测试数量
            int numTests = Convert.ToInt32(Console.ReadLine());

            // TODO:创建一个 LibraryTests 对象,并运行前 numTests 个测试
        }
    }
}

面向对象编程中的所有课

自己练习: C# 在线编译器