Тестирование и интеграция
Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy — урок 106 из 110.
Задание
ЛегкоВ предыдущем уроке вы создали интерфейс администратора для управления инвентарем библиотеки. Теперь пришло время объединить все вместе, создав комплексный набор тестов, который подтвердит, что все компоненты вашей системы управления библиотекой (Library Management System) корректно работают друг с другом.
Вы добавите класс LibraryTester, который запускает интеграционные тесты для всех функций вашей библиотеки — проверяя, что книги, пользователи, администраторы, процессы заимствования, поиска и управления инвентарем функционируют должным образом при совместном использовании.
book.dart,user.dart,admin.dart,library.dart: Оставьте существующие классы без изменений.library_tester.dart: Создайте новый классLibraryTester, который проверяет вашу библиотечную систему. Он должен иметь экземплярLibraryи включать следующие тестовые методы:setupTestData()— регистрирует администратора (A001,Test Admin), добавляет две книги через администратора (978-0-01,Book One,Author Aи978-0-02,Book Two,Author B) и регистрирует пользователя (U001,Test User)testBorrowing()— берет первую книгу для пользователя, пытается взять ее снова (должно завершиться неудачей), затем возвращает ее. ВыводитBorrowing test: PASSпосле завершения.testSearch()— ищет книги со словомBookв названии, выводитSearch found: X books, где X — количество, затем выводитSearch test: PASStestAdminOperations()— удаляет вторую книгу, используя администратора, выводит количество книг в форматеBooks after removal: X, затем выводитAdmin test: PASSrunAllTests()— вызываетsetupTestData(), затем запускает все три тестовых метода по порядку и, наконец, выводитAll tests completed!
main.dart: Создайте экземплярLibraryTesterи вызовитеrunAllTests()для выполнения полного набора тестов.
Ожидаемый вывод:
A001 added "Book One"
A001 added "Book Two"
U001 borrowed "Book One"
Book not available
U001 returned "Book One"
Borrowing test: PASS
Search found: 2 books
Search test: PASS
A001 removed "Book Two"
Books after removal: 1
Admin test: PASS
All tests completed!Попробуйте сами
import 'library_tester.dart';
void main() {
// TODO: Создайте экземпляр LibraryTester и вызовите runAllTests()
}
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыБиблиотеки и импортВведение в ООПКлассы и объектыКлючевое слово thisМетодыПеременные экземпляраОсновы конструкторовИтоги — Простой калькулятор4Null-безопасность
Введение в Null-безопасностьNullable и Non-Nullable типыОператоры ? и !Ключевое слово Late и Null-безопасностьNull-aware операторыNull-безопасность в классахИтоги — Система профилей пользователей7Абстрактные классы и интерфейсы
Абстрактные классыАбстрактные методыИнтерфейсы в DartНеявные интерфейсыРеализация против наследованияМножественные интерфейсыИтоги — Калькулятор фигур10Коллекции и обобщения
Обзор List, Set, MapТипобезопасные коллекцииОбобщенные классыОбобщенные методыОграничения обобщенийIterable и IteratorИтоги: Обобщенное хранилище13Продвинутые концепции ООП
Композиция против наследованияМетоды расширенияВызываемые классыЗапечатанные классы (Dart 3)Записи (Dart 3)Паттерны и сопоставление (3.0)Перечисления с методами16Проект: Управление библиотекой
Обзор проектаКлассы Book и User2Конструкторы в Dart
Конструктор по умолчаниюИменованные конструкторыСписки инициализацииКонстантные конструкторыФабричные конструкторыПеренаправляющие конструкторыИтоги — Shape Builder5Инкапсуляция
Публичные и приватные членыСоглашение о префиксе _Приватность на уровне библиотекГеттеры и сеттеры: подробный разборСкрытие данныхИтоги — Записи о студентах8Mixins
Введение в MixinsСоздание MixinsИспользование нескольких MixinsКлючевое слово on в MixinsMixin и наследованиеMixin и интерфейсИтоги: Система животных11Специальные методы
Переопределение toString()Переопределение hashCode и ==Интерфейс ComparableМетод call()Переопределение noSuchMethodПовторение — Пользовательская коллекция14Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн Strategy3Свойства классов
Члены экземпляра и статические членыПоля Final и ConstПеременные LateСтатические методы и поляГеттеры и сеттерыИтоги — Менеджер банковского счета6Наследование
Основы наследованияКлючевое слово superПереопределение методовАннотация @overrideКлючевое слово final для классовКонструкторы и наследованиеИтоги: Иерархия сотрудников9Полиморфизм
Основы полиморфизмаПолиморфизм через интерфейсыПроверка типов во время выполненияОператоры is и asКлючевое слово covariantИтоги — Обработчик платежей12Асинхронное ООП
Futures и async/awaitОсновы StreamsКонтроллеры StreamАсинхронные конструкторыАсинхронность в методах классовИтоги — Data Fetcher15Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн КомпоновщикПаттерн Репозиторий