| ## ✅ Tests unitaires & couverture | |
| Ce projet dispose de tests automatisés pour valider les principales fonctionnalités : | |
| ### 📂 Fichiers de test | |
| | Fichier | Description | | |
| | ------------------------- | --------------------------------------------------------------------------------------------------------------------- | | |
| | `tests/test_handler.py` | Vérifie le bon fonctionnement de la fonction `predict()` en mode `zero-shot` et `few-shot`. | | |
| | `tests/test_interface.py` | Teste l'interface Gradio, les comportements inattendus (entrée vide, modèle invalide), et la création de l'interface. | | |
| --- | |
| ### 🧪 Lancer les tests | |
| ```bash | |
| python -m pytest --cov=app --cov-report=term-missing | |
| ``` | |
| Ce qui génère un rapport de couverture avec les lignes non couvertes : | |
| ``` | |
| Name Stmts Miss Cover Missing | |
| ------------------------------------------------ | |
| app/handler.py 16 0 100% | |
| app/interface.py 7 2 71% 17-18 | |
| ------------------------------------------------ | |
| TOTAL 23 2 91% | |
| ``` | |
| > 🌟 Les lignes 17-18 non couvertes correspondent à l’exécution directe de l’interface dans le fichier `main.py`. | |
| > Ces lignes ne sont volontairement **pas testées** car elles concernent le lancement interactif de l'application (`iface.launch()`), hors du périmètre des tests unitaires. | |
| --- | |
| ### 🚫 Hook `pre-push` automatique | |
| Pour garantir la stabilité du dépôt, un **hook Git `pre-push`** a été mis en place. | |
| 🧹 Il exécute automatiquement les tests avant chaque `git push`. | |
| #### Exemple `.git/hooks/pre-push` | |
| ```bash | |
| #!/bin/sh | |
| echo "🔍 Exécution des tests unitaires avant le push..." | |
| python -m pytest --cov=app --cov-report=term-missing | |
| if [ $? -ne 0 ]; then | |
| echo "❌ Push bloqué : les tests ont échoué." | |
| exit 1 | |
| fi | |
| ``` | |
| #### 🔧 Installation manuelle | |
| 1. Crée un fichier `.git/hooks/pre-push` si ce n’est pas déjà fait, | |
| 2. Colle le script ci-dessus, | |
| 3. Rends-le exécutable : | |
| ```bash | |
| chmod +x .git/hooks/pre-push | |
| ``` | |