#include #include #include #include "app.hpp" /// @brief 测试图书管理系统核心功能 /// 使用标准库 assert,不依赖第三方测试框架。 static void testAddAndFind() { std::cout << "[Test] testAddAndFind ... "; App app; assert(app.size() == 0); Book b1{"书名A", "作者A", "ISBN-001"}; assert(app.addBook(b1)); assert(app.size() == 1); // 重复 ISBN 应返回 false Book b2{"书名B", "作者B", "ISBN-001"}; assert(!app.addBook(b2)); assert(app.size() == 1); const Book* found = app.findByIsbn("ISBN-001"); assert(found != nullptr); assert(found->getTitle() == "书名A"); assert(found->getAuthor() == "作者A"); // 不存在的 ISBN assert(app.findByIsbn("ISBN-999") == nullptr); std::cout << "PASSED\n"; } /// @brief 测试删除功能 static void testRemove() { std::cout << "[Test] testRemove ... "; App app; app.addBook(Book{"A", "a", "X"}); app.addBook(Book{"B", "b", "Y"}); assert(app.size() == 2); // 删除存在的 assert(app.removeBook("X")); assert(app.size() == 1); // 删除不存在的 assert(!app.removeBook("Z")); assert(app.size() == 1); std::cout << "PASSED\n"; } /// @brief 测试搜索功能(不区分大小写) static void testSearch() { std::cout << "[Test] testSearch ... "; App app; app.addBook(Book{"C++ Primer", "Stanley Lippman", "I1"}); app.addBook(Book{"Effective Modern C++", "Scott Meyers", "I2"}); app.addBook(Book{"设计模式", "GoF", "I3"}); // 按书名搜索(不区分大小写) auto r1 = app.search("c++"); assert(r1.size() == 2); // 按作者搜索 auto r2 = app.search("stanley"); assert(r2.size() == 1); assert(r2[0].getIsbn() == "I1"); // 无匹配 auto r3 = app.search("不存在的书"); assert(r3.empty()); std::cout << "PASSED\n"; } /// @brief 测试借出和归还 static void testBorrowReturn() { std::cout << "[Test] testBorrowReturn ... "; App app; app.addBook(Book{"A", "a", "I-A"}); // 借出 assert(app.borrowBook("I-A")); const Book* b = app.findByIsbn("I-A"); assert(b != nullptr); assert(b->isBorrowed()); // 重复借出应失败 assert(!app.borrowBook("I-A")); // 归还 assert(app.returnBook("I-A")); assert(!b->isBorrowed()); // 重复归还应失败 assert(!app.returnBook("I-A")); // 不存在的 ISBN assert(!app.borrowBook("I-NONE")); assert(!app.returnBook("I-NONE")); std::cout << "PASSED\n"; } /// @brief 主测试入口 int main() { std::cout << "===== 图书管理系统单元测试 =====\n\n"; testAddAndFind(); testRemove(); testSearch(); testBorrowReturn(); std::cout << "\n✅ 所有测试通过!\n"; return 0; }