{"id":25813588,"url":"https://github.com/sdley/unittest-junit5","last_synced_at":"2025-09-06T16:33:47.937Z","repository":{"id":278066857,"uuid":"934390571","full_name":"sdley/UnitTest-Junit5","owner":"sdley","description":"Tests Unitaires avec JUnit 5","archived":false,"fork":false,"pushed_at":"2025-02-17T19:46:11.000Z","size":8,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-17T20:35:37.191Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sdley.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-17T18:46:54.000Z","updated_at":"2025-02-17T19:46:14.000Z","dependencies_parsed_at":"2025-02-17T20:45:40.262Z","dependency_job_id":null,"html_url":"https://github.com/sdley/UnitTest-Junit5","commit_stats":null,"previous_names":["sdley/unittest-junit5"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdley%2FUnitTest-Junit5","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdley%2FUnitTest-Junit5/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdley%2FUnitTest-Junit5/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sdley%2FUnitTest-Junit5/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sdley","download_url":"https://codeload.github.com/sdley/UnitTest-Junit5/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241090376,"owners_count":19907937,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-02-28T02:39:03.220Z","updated_at":"2025-02-28T02:39:03.809Z","avatar_url":"https://github.com/sdley.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TD1 : Tests Unitaires avec JUnit 5\n\n## Objectifs pédagogiques :\n\n- Apprendre à écrire et exécuter des tests unitaires avec JUnit 5.\n- Comprendre les concepts de base des tests unitaires, y compris les annotations et les assertions.\n- Améliorer la qualité du code en introduisant des tests automatisés.\n\n## Notes\n\n### Notion de classe utilitaire (Utility Class)\nUne classe utilitaire est une classe qui contient uniquement des méthodes statiques et ne stocke aucun état. \nSon but est d'offrir des fonctionnalités réutilisables sans nécessiter l'instanciation de la classe.\nCe qui justifie que ListeUtil n'a pas d'attributs !\n\nDans notre cas, ListeUtil fournit une méthode statique pour ajouter un élément à une liste :\n\n```java\npublic static void ajouterElement(List\u003cString\u003e list, String element) {\n    if (list == null) {\n        throw new IllegalArgumentException(\"La liste ne peut pas être null.\");\n    }\n    list.add(element);\n}\n```\n#### 📌 Pourquoi cette méthode est static ?\n\nElle ne dépend pas d'un état interne de ListeUtil.\nElle ne stocke rien : elle agit simplement sur une liste passée en paramètre.\nCela permet d'appeler la méthode directement avec ListeUtil.ajouterElement(...) sans créer d'objet.\n\n#### Quand utiliser une classe avec des attributs ?\nSi nous devions stocker une liste interne, nous aurions besoin d'un attribut et d'une instance de classe :\n\n```java\npublic class ListeUtil {\n    private List\u003cString\u003e elements = new ArrayList\u003c\u003e();\n\n    public void ajouterElement(String element) {\n        elements.add(element);\n    }\n\n    public List\u003cString\u003e getElements() {\n        return elements;\n    }\n}\n```\n\n##### 📌 Différence :\n\n- Ici, ListeUtil stocke un état avec l'attribut elements.\n- On doit créer un objet pour utiliser cette classe :\n```java\nListeUtil liste = new ListeUtil();\nliste.ajouterElement(\"Test\");\n```\n\n🔴 Dans notre cas, ce n'est pas nécessaire car nous voulons juste ajouter un élément à une liste existante, pas stocker une liste.\n\n#### Résumé : Quand utiliser des attributs ?\n\n| Cas | Attributs nécessaires ? | Exemples |\n| --- | :-------------------: | --- |\n| Classe utilitaire (méthodes statiques) | X Non | Math, Collections, Files |\n| Classe avec un état interne | ✓ Oui | ArrayList, HashMap, Personne |\n\nDans notre cas, ListeUtil est une classe utilitaire, donc elle n'a pas besoin d'attributs ! 🚀✅\n\n### Notion de HashMap\nUn HashMap est une implémentation de la structure de données table de hachage en Java, \nqui permet de stocker des paires clé-valeur. Il fait partie du package java.util et est souvent utilisé pour associer une clé unique à une valeur.\n\n#### 1. Déclaration d'un HashMap\nPour utiliser un HashMap, on doit d'abord l'importer :\n```java\nimport java.util.HashMap;\nimport java.util.Map; // Interface Map\n```\nPuis, on peut déclarer un HashMap :\n```java\n// Création d'un HashMap qui associe un ID (String) à un Utilisateur\nMap\u003cString, Utilisateur\u003e utilisateurs = new HashMap\u003c\u003e();\n```\n\n#### 2. Opérations de base sur un HashMap\nVoici le tableau converti en format Markdown :\n\n| Opération | Méthode | Description |\n| --- | --- | --- |\n| Ajouter un élément | `put(K key, V value)` | Associe une clé à une valeur. |\n| Obtenir une valeur | `get(K key)` | Retourne la valeur associée à la clé. |\n| Vérifier l'existence d'une clé | `containsKey(K key)` | Retourne `true` si la clé existe. |\n| Vérifier l'existence d'une valeur | `containsValue(V value)` | Retourne `true` si la valeur existe. |\n| Supprimer une entrée | `remove(K key)` | Supprime la clé et sa valeur associée. |\n| Obtenir la taille | `size()` | Retourne le nombre d'éléments. |\n| Vérifier si vide | `isEmpty()` | Retourne `true` si la map est vide. |\n\n#### 3. Exemple d'utilisation\nVoici un exemple où on stocke et manipule des utilisateurs dans un HashMap :\n```java\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class GestionUtilisateurs {\n    public static void main(String[] args) {\n        // Création d'un HashMap pour stocker des utilisateurs\n        Map\u003cString, String\u003e utilisateurs = new HashMap\u003c\u003e();\n\n        // Ajout d'utilisateurs (clé = ID, valeur = nom)\n        utilisateurs.put(\"U123\", \"Mamadou Diop\");\n        utilisateurs.put(\"U456\", \"Aissatou Fall\");\n        utilisateurs.put(\"U789\", \"Cheikh Ndiaye\");\n\n        // Récupérer un utilisateur\n        System.out.println(\"Nom de l'utilisateur U123 : \" + utilisateurs.get(\"U123\"));\n\n        // Vérifier si un utilisateur existe\n        if (utilisateurs.containsKey(\"U456\")) {\n            System.out.println(\"L'utilisateur avec l'ID U456 existe !\");\n        }\n\n        // Supprimer un utilisateur\n        utilisateurs.remove(\"U789\");\n\n        // Afficher tous les utilisateurs restants\n        System.out.println(\"Utilisateurs restants : \" + utilisateurs);\n    }\n}\n```\n##### 📌 Résultat attendu :\n```\nNom de l'utilisateur U123 : Mamadou Diop\nL'utilisateur avec l'ID U456 existe !\nUtilisateurs restants : {U123=Mamadou Diop, U456=Aissatou Fall}\n```\n#### 4. Quand utiliser un HashMap ?\n✅ Quand on veut stocker et retrouver des données rapidement à l'aide d'une clé unique.\u003cbr\u003e\n✅ Quand l'ordre d'insertion n'est pas important.\u003cbr\u003e\n✅ Quand on a besoin d'associer des informations sous forme de clé-valeur.\u003cbr\u003e\n\n🚀 Exemple d'application :\n\n- Associer un identifiant (ID) à un utilisateur.\n- Associer un numéro de produit à son prix.\n- Stocker des paramètres de configuration d'un système.\n\n#### 5. Différences entre HashMap et TreeMap / LinkedHashMap\n\nVoici le tableau converti en format Markdown :\n\n| Type de Map | Ordre de stockage | Performance (recherche) | Cas d'utilisation |\n| --- | --- | --- | --- |\n| HashMap | Pas d'ordre garanti | Très rapide (O(1)) | Stocker rapidement des éléments avec des clés uniques. |\n| TreeMap | Trie les clés | Moins rapide (O(log n)) | Stocker des éléments triés par clé. |\n| LinkedHashMap | Conserve l'ordre d'insertion | Rapide (O(1)) | Besoin de conserver l'ordre d'ajout. |\n\n🔴 HashMap est le plus rapide pour les recherches, mais n'offre pas de garantie sur l'ordre des éléments.\u003cbr\u003e\n\nUn HashMap est une structure de données très efficace pour associer des clés et des valeurs, et permet d'accéder rapidement aux données. 🚀\n\n### Notion de Singleton \nUn Singleton est un design pattern qui garantit qu'une seule instance d'une classe est créée et fournit un point d'accès global à cette instance.\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsdley%2Funittest-junit5","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsdley%2Funittest-junit5","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsdley%2Funittest-junit5/lists"}