Tests et intégration
Fait partie de la section Programmation Orientée Objet du Journey Dart de Coddy — leçon 106 sur 110.
Défi
FacileDans la leçon précédente, vous avez construit une interface d'administration pour gérer l'inventaire de la bibliothèque. Il est maintenant temps de tout rassembler en créant une suite de tests complète qui valide que tous les composants de votre système de gestion de bibliothèque fonctionnent correctement ensemble.
Vous allez ajouter une classe LibraryTester qui exécute des tests d'intégration sur toutes les fonctionnalités de votre bibliothèque - en vérifiant que les livres, les utilisateurs, les administrateurs, les emprunts, la recherche et la gestion de l'inventaire fonctionnent tous comme prévu lorsqu'ils sont utilisés ensemble.
book.dart,user.dart,admin.dart,library.dart: Gardez vos classes existantes inchangées.library_tester.dart: Créez une nouvelle classeLibraryTesterqui valide votre système de bibliothèque. Elle doit avoir une instance deLibraryet inclure ces méthodes de test :setupTestData()- enregistre un administrateur (A001,Test Admin), ajoute deux livres via l'administrateur (978-0-01,Book One,Author Aet978-0-02,Book Two,Author B), et enregistre un utilisateur (U001,Test User)testBorrowing()- emprunte le premier livre pour l'utilisateur, tente de l'emprunter à nouveau (devrait échouer), puis le rend. AfficheBorrowing test: PASSaprès l'achèvement.testSearch()- recherche des livres avecBookdans le titre, afficheSearch found: X booksoù X est le nombre, puis afficheSearch test: PASStestAdminOperations()- supprime le deuxième livre en utilisant l'administrateur, affiche le nombre de livres sous la formeBooks after removal: X, puis afficheAdmin test: PASSrunAllTests()- appellesetupTestData(), puis exécute les trois méthodes de test dans l'ordre, et enfin afficheAll tests completed!
main.dart: Créez une instance deLibraryTesteret appelezrunAllTests()pour exécuter la suite de tests complète.
Sortie attendue :
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!Essayez vous-même
import 'library_tester.dart';
void main() {
// TODO: Créer une instance de LibraryTester et appeler runAllTests()
}
Toutes les leçons de Programmation Orientée Objet
1Les bases de la POO
Fichiers externesBibliothèques et importsIntroduction à la POOClasses vs ObjetsLe mot-clé thisMéthodesVariables d'instanceBases des constructeursRécapitulatif - Calculatrice simple4Null Safety
Introduction à la Null SafetyNullable vs Non-NullableLes opérateurs ? et !Le mot-clé late et la Null SafetyLes opérateurs Null-AwareLa Null Safety dans les classesRécapitulatif - Système de profil utilisateur7Classes abstraites et Interfaces
Classes abstraitesMéthodes abstraitesInterfaces en DartInterfaces implicitesImplémentation vs ExtensionInterfaces multiplesRécapitulatif - Calculateur de formes10Collections et Génériques
Aperçu des List, Set et MapCollections Type-SafeClasses génériquesMéthodes génériquesContraintes de généricitéIterable & IteratorRécapitulatif - Stockage générique13Concepts avancés de la POO
Composition vs HéritageMéthodes d'extensionClasses appelablesClasses scellées (Dart 3)Records (Dart 3)Patterns et Matching (3.0)Enums avec méthodes16Projet : Gestion de bibliothèque
Présentation du projetClasses Livre et Utilisateur2Les constructeurs en Dart
Constructeur par défautConstructeurs nommésListes d'initialisationConstructeurs constantsConstructeurs factoryConstructeurs de redirectionRécapitulatif - Shape Builder5Encapsulation
Membres publics vs privésLa convention du préfixe _Visibilité au niveau de la bibliothèqueApprofondissement des Getters & SettersMasquage d'informationsRécapitulatif - Dossiers d'étudiants8Mixins
Introduction aux MixinsCréation de MixinsUtilisation de plusieurs MixinsLe mot-clé on dans les MixinsMixin vs HéritageMixin vs InterfaceRécapitulatif - Système Animal11Méthodes spéciales
Redéfinition de toString()Redéfinition de hashCode & ==Interface ComparableMéthode call()Redéfinition de noSuchMethodRécapitulatif - Collection personnalisée14Patrons de conception Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron ObservateurPatron Stratégie3Propriétés de classe
Membres d'instance vs statiquesChamps Final & ConstVariables LateMéthodes et champs statiquesGetters et SettersRécapitulatif - Gestionnaire de compte bancaire6Héritage
Bases de l'héritageLe mot-clé superRedéfinition de méthodeL'annotation @overrideLe mot-clé final pour les classesConstructeurs et héritageRécapitulatif - Hiérarchie des employés9Polymorphisme
Bases du polymorphismePolymorphisme via les interfacesVérification de type à l'exécutionLes opérateurs is & asMot-clé covariantRécapitulatif - Processeur de paiement12POO Asynchrone
Futures & async/awaitBases des StreamsStream ControllersConstructeurs asynchronesL'asynchrone dans les méthodes de classeRécapitulatif - Data Fetcher15Patrons de conception Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode ModèlePatron ÉtatPatron CompositePatron Repository