测试与集成
本课属于 Coddy PHP 学习旅程的“面向对象编程”单元。第 87 课,共 91 课。
挑战
简单恭喜你完成了一个完整的图书管理系统!现在该把所有组件组合起来,验证它们能否顺畅协作了。你将创建一个全面的集成测试,测试图书馆的完整工作流程。
你将把代码分成 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"
然后按顺序运行以下集成测试,并将每个结果打印在新的一行:
- 让用户借阅
"978-0" - 让用户借阅
"978-1" - 使用第二个输入按作者搜索,并打印数量:
"Books by author: [count]" - 获取可借阅的图书,并打印:
"Available: [count]" - 让用户归还
"978-0" - 再次获取可借阅的图书,并打印:
"Available after return: [count]" - 让管理员移除
"978-0" - 让管理员再次尝试移除
"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 在线编译器