Tests et Couverture
Le projet dispose d’une suite de tests complète couvrant les modules critiques.
Résumé de la Couverture
Module |
Couverture |
Tests |
Statut |
|---|---|---|---|
Modules Core |
|||
|
92% |
18 tests |
✅ Excellent |
|
97% |
18 tests |
✅ Excellent |
|
100% |
18 tests |
✅ Parfait |
|
95% |
15 tests |
✅ Excellent |
|
94% |
11 tests |
✅ Excellent |
|
61% |
18 tests |
⚠️ Bon |
Composants UI |
|||
|
63% |
Tests intégration |
⚠️ Acceptable |
|
32% |
18 tests |
⚠️ UI principalement |
|
22% |
15 tests |
⚠️ UI principalement |
Utilitaires |
|||
|
Tests fonctionnels |
19 tests |
✅ Testé |
Couverture globale : 49%
Total : 160 tests passent avec succès
📊 Rapport de couverture détaillé : Voir le rapport HTML interactif
Le rapport HTML complet est généré automatiquement et déployé avec cette documentation. Il permet de visualiser ligne par ligne le code couvert par les tests.
Détails par Module
Modules Core (Logique Métier)
Les modules core/ contiennent la logique métier critique et sont excellemment testés :
- CacheManager (92%)
Tests de sauvegarde/récupération du cache
Tests de génération de clés cohérentes
Tests de nettoyage du cache (partiel et complet)
Tests de gestion d’erreurs (cache corrompu, données invalides)
Tests d’informations sur le cache
- CacheableMixin (97%)
Tests d’opérations cachées
Tests d’activation/désactivation du cache
Tests de cache hit/miss
Tests avec plusieurs analyseurs
Tests de préservation des types de données
- DataLoader (100%)
Chargement de fichiers CSV
Validation des données
Préprocessing
Gestion d’erreurs
- DataExplorer (95%)
Exploration de datasets
Statistiques descriptives
Rechargement de données
- Logger (94%)
Configuration multi-handlers
Logs structurés (debug, info, warning, error)
Fichiers de logs séparés
- InteractionsAnalyzer (61%)
Agrégation des interactions
Preprocessing IQR/Z-score
Détection d’outliers
Création de segments de popularité
Catégorisation de recettes
Composants UI (Pages Streamlit)
Les pages Streamlit contiennent beaucoup de code de rendu UI difficile à tester unitairement.
- NoteCes pages sont testées manuellement via :
Application déployée sur Streamlit Cloud
Tests d’intégration end-to-end
Validation utilisateur
La couverture plus faible est normale et attendue pour du code UI.
Exécuter les Tests
Tests complets
# Tous les tests
uv run pytest
# Tests avec couverture
uv run pytest --cov=src --cov-report=html
# Ouvrir le rapport HTML
open htmlcov/index.html
Tests spécifiques
# Tests d'un module spécifique
uv run pytest tests/test_cache_manager.py -v
# Tests d'une classe spécifique
uv run pytest tests/test_cache_manager.py::TestCacheManager -v
# Tests avec affichage des print
uv run pytest -s
Linting
# Vérification PEP8
uv run flake8 src/ tests/
# Fix automatique
uv run autopep8 --in-place --recursive src/ tests/
Tests de Preprocessing
# Tests du preprocessing de la matrice d'ingrédients
uv run pytest tests/test_preprocess_ingredients_matrix.py -v
# Script de test du preprocessing (avec données réelles)
bash scripts/test_preprocessing.sh
Intégration Continue
Les tests sont exécutés automatiquement via GitHub Actions :
Workflow :
.github/workflows/test-app.ymlDéclenchement : À chaque push et pull request
Environnement : Python 3.11, Ubuntu latest
Durée : ~3 minutes
Badges
Amélioration Continue
Modules Prioritaires
Les modules Core étant déjà excellemment testés (92-100%), les efforts futurs devraient se concentrer sur :
InteractionsAnalyzer : Améliorer de 61% à 80% - Tester les méthodes de preprocessing non couvertes - Ajouter des tests pour les cas limites
Pages Streamlit : Tests d’intégration - Mocker Streamlit pour tester la logique métier - Tests end-to-end avec Selenium/Playwright
Bonnes Pratiques
✅ Tous les nouveaux modules Core doivent avoir >90% de couverture
✅ Les bugs doivent d’abord être reproduits par un test (TDD)
✅ Les tests doivent être rapides (<5 secondes pour la suite complète)
✅ Utiliser des fixtures pytest pour partager les données de test
✅ Mocker les dépendances externes (fichiers, API, etc.)