meteocompare

Stratégie de tests MeteoCompare

Cette base sépare volontairement les tests rapides JVM des tests Android instrumentés.

Pyramide de tests

Tests JVM (app/src/test)

Ils couvrent les règles métier, les agrégations météo, le mapping réseau, les ViewModels, les widgets purs et les schedulers testables sans appareil. Ils ne doivent dépendre ni du réseau réel, ni de l’heure système non contrôlée, ni d’une base Android persistante.

Tests instrumentés (app/src/androidTest)

Ils couvrent ce qui nécessite Android :

Les parcours d’application n’utilisent jamais Open-Meteo. TestRepositoryModule remplace les repositories de production par des fakes déterministes. Les dates de fixtures sont calculées relativement au jour d’exécution puis figées pour tout le processus de test.

Commandes

Sous Windows :

.\gradlew.bat testDebugUnitTest
.\gradlew.bat connectedDebugAndroidTest
.\gradlew.bat lintDebug
.\gradlew.bat assembleDebug

Validation complète :

.\gradlew.bat testDebugUnitTest connectedDebugAndroidTest lintDebug assembleDebug

Sous macOS/Linux, remplacer gradlew.bat par ./gradlew.

Environnement instrumenté recommandé

Avant une release, exécuter au minimum la suite sur une locale française et une locale anglaise, ainsi que sur un appareil physique si possible.

Règles pour les nouveaux tests

  1. Un test Compose appelle setContent une seule fois.
  2. Les interactions ciblent un testTag, un rôle sémantique ou une ressource localisée, jamais une chaîne française arbitraire quand elle peut varier.
  3. Les tests de ViewModel utilisent un dispatcher principal de test et des flows contrôlés.
  4. Les tests instrumentés ne contactent aucun service externe.
  5. Toute correction de bug ajoute un test de non-régression au niveau le plus bas possible.
  6. Un test ne dépend jamais des données laissées par un autre test.

Diagnostic en cas d’échec

Pour obtenir davantage de détails :

.\gradlew.bat connectedDebugAndroidTest --stacktrace --info

Les rapports sont générés dans :

Diagnostic du rafraîchissement des widgets

Le travail périodique porte le tag meteocompare_widget et le nom unique meteocompare_widget_refresh. Pour diagnostiquer un téléphone où le launcher semble conserver une ancienne vue :

adb logcat -s MeteoCompare/Widget WM-WorkerWrapper WM-Processor
adb shell dumpsys jobscheduler | findstr /I "meteocompare widget_refresh"

Test de reprise après veille profonde :

adb shell dumpsys deviceidle force-idle
# Attendre, puis sortir du mode idle
adb shell dumpsys deviceidle unforce
adb shell input keyevent KEYCODE_WAKEUP

Points à vérifier :