Menu
CoddyTech

测试与集成

本课属于 Coddy PHP 学习旅程的“面向对象编程”单元。第 87 课,共 91 课。

challenge icon

挑战

简单

恭喜你完成了一个完整的图书管理系统!现在该把所有组件组合起来,验证它们能否顺畅协作了。你将创建一个全面的集成测试,测试图书馆的完整工作流程。

你将把代码分成 5 个文件:

  • Book.php:包含你的 Book 类,其中有只读属性(isbn、title、author)、私有属性 $isAvailable,以及以下方法:isAvailable()、markAsBorrowed() 和 markAsReturned()。
  • User.php:引入 Book 文件。包含你的 User 类,其中有只读属性(id、name)、私有数组 $borrowedBooks、值为 3 的 MAX_BOOKS 常量,以及所有用户方法。
  • Library.php:引入 User 文件。包含你的 Library 类,负责图书管理、借阅和归还、搜索,以及 removeBook() 方法。
  • Admin.php:引入 Library 文件。包含你的 Admin 类,该类继承自 User,并包含 addBookToLibrary() 和 removeBookFromLibrary() 方法。
  • main.php:引入 Admin 文件。在这里运行集成测试。你会收到两个输入:用户名和搜索作者的关键词。

    设置图书馆系统:

    • 创建一个 Library
    • 创建一个 ID 为 1、名称为 "LibraryAdmin" 的 Admin
    • 创建一个 ID 为 2、名称为所提供用户名的 User

    让管理员添加以下 3 本书:

    • ISBN:"978-0",书名:"PHP Fundamentals",作者:"Sarah Johnson"
    • ISBN:"978-1",书名:"OOP Patterns",作者:"Mike Chen"
    • ISBN:"978-2",书名:"Web Security",作者:"Sarah Johnson"

    然后按顺序运行以下集成测试,并将每个结果打印在新的一行:

    1. 让用户借阅 "978-0"
    2. 让用户借阅 "978-1"
    3. 使用第二个输入按作者搜索,并打印数量:"Books by author: [count]"
    4. 获取可借阅的图书,并打印:"Available: [count]"
    5. 让用户归还 "978-0"
    6. 再次获取可借阅的图书,并打印:"Available after return: [count]"
    7. 让管理员移除 "978-0"
    8. 让管理员再次尝试移除 "978-0"

这个最终挑战将验证整个系统能否协同工作:管理员管理库存,用户在限额内借阅,搜索返回准确结果,并且图书的可借阅状态在整个工作流程中都能正确更新。

亲手试试

<?php

require_once 'Admin.php';

// 读取输入
$userName = trim(fgets(STDIN));
$searchAuthor = trim(fgets(STDIN));

// TODO:创建一个 Library 对象

// TODO:创建一个 ID 为 1、名称为 "LibraryAdmin" 的 Admin 对象

// TODO:创建一个 ID 为 2、名称为提供的用户名的 User 对象

// TODO:让管理员添加 3 本书:
// - ISBN:"978-0",书名:"PHP Fundamentals",作者:"Sarah Johnson"
// - ISBN:"978-1",书名:"OOP Patterns",作者:"Mike Chen"
// - ISBN:"978-2",书名:"Web Security",作者:"Sarah Johnson"

// TODO:集成测试步骤:
// 1. 让用户借阅 "978-0"
// 2. 让用户借阅 "978-1"
// 3. 使用 $searchAuthor 按作者搜索,并打印:"Books by author: [count]"
// 4. 获取可借阅的图书数量并打印:"Available: [count]"
// 5. 让用户归还 "978-0"
// 6. 再次获取可借阅的图书数量并打印:"Available after return: [count]"
// 7. 让管理员移除 "978-0"
// 8. 让管理员再次尝试移除 "978-0"

?>

面向对象编程中的所有课

自己练习: PHP 在线编译器