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
1Fondamentaux de la POO
Fichiers externesBibliothèques et importsIntroduction à la POOClasses vs objetsLe mot-clé thisMéthodesVariables d’instanceBases des constructeursRécapitulatif - Calculatrice simple4Sécurité face aux valeurs nulles
Introduction à la sécurité face aux valeurs nullesNullable vs Non-NullableLes opérateurs ? et !Mot-clé Late et sécurité face aux valeurs nullesOpérateurs sensibles à nullSécurité face aux valeurs nulles dans les classesRécapitulatif – Système de profil utilisateur7Classes abstraites et interfaces
Classes abstraitesMéthodes abstraitesInterfaces en DartInterfaces implicitesImplémenter ou étendreInterfaces multiplesRécapitulatif - Calculateur de formes10Collections et génériques
Vue d’ensemble des List, Set et MapCollections à typage sûrClasses génériquesMéthodes génériquesContraintes génériquesIterable et IteratorRécapitulatif – stockage générique13Concepts avancés de la POO
Composition ou héritageMéthodes d’extensionClasses appelablesClasses scellées (Dart 3)Enregistrements (Dart 3)Patterns et correspondance (3.0)Énumérations avec méthodes16Projet : gestion de bibliothèque
Vue d’ensemble du projetClasses Livre et Utilisateur2Constructeurs en Dart
Constructeur par défautConstructeurs nommésListes d'initialisationConstructeurs constantsConstructeurs factoryConstructeurs redirigésRécapitulatif - Constructeur de formes5Encapsulation
Membres publics vs privésLa convention du préfixe _Confidentialité au niveau de la bibliothèqueApprofondissement des getters et settersMasquage de l’informationRécapitulatif - Fiches des étudiants8Mixins
Introduction aux MixinsCréer des MixinsUtiliser plusieurs MixinsMot-clé on dans les MixinsMixin ou héritageMixin ou interfaceRécapitulatif - Système animal11Méthodes spéciales
Redéfinition de toString()Redéfinition de hashCode et ==Interface ComparableMéthode call()Redéfinition de noSuchMethodRécapitulatif - Collection personnalisée14Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron Strategy3Propriétés des classes
Membres d’instance et statiquesChamps Final et ConstVariables différéesMéthodes et champs statiquesAccesseurs et mutateursRécapitulatif - Gestionnaire de compte bancaire6Héritage
Héritage de baseLe mot-clé superRedéfinition de méthodeL’annotation @overrideLe mot-clé de classe finalConstructeurs et héritageRécapitulatif – Hiérarchie des employés9Polymorphisme
Bases du polymorphismePolymorphisme via les interfacesVérification des types à l’exécutionLes opérateurs is et asMot-clé covariantRécapitulatif - Processeur de paiements12POO asynchrone
Futures et async/awaitNotions de base des StreamsContrôleurs de StreamsConstructeurs asynchronesAsynchrone dans les méthodes de classeRécapitulatif - récupérateur de données15Patrons de conception – Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron CompositePatron DépôtEntraînez-vous par vous-même : Compilateur Dart en ligne