Mission 05 — Qualité
À l'issue de cette mission, vous saurez :
- isoler la logique métier pour la rendre testable
- écrire des tests unitaires xUnit et des scénarios de test fonctionnels
- adapter une interface aux différentes tailles d'écran
Spec
- Extraire la logique de session (mélange, file, statistiques) dans des classes sans dépendance à l'UI.
- Écrire au minimum 3 tests unitaires xUnit, par exemple :
- le % de mémorisation est correct pour un jeu de réponses donné,
- la carte la plus difficile est bien celle avec le plus d'erreurs,
- une carte ratée est remise dans la file, une carte juste n'y revient pas.
- Rédiger le PDF des 3 scénarios de test manuels : précondition, étapes numérotées, résultat attendu, résultat obtenu.
- Rendre au moins un écran responsive : la liste des cartes reste agréable sur petit téléphone ET sur tablette/paysage.
- Vérifier le comportement de toute l'app en rotation portrait/paysage.
Maquette
Téléphone (portrait) Tablette / paysage
┌──────────────┐ ┌────────────────────────────────┐
│ Carte 1 │ │ Carte 1 Carte 2 │
│ Carte 2 │ │ Carte 3 Carte 4 │
│ Carte 3 │ │ Carte 5 Carte 6 │
└──────────────┘ └────────────────────────────────┘Théorie utile
- Codelab : structurer le projet pour les tests — à faire avant cette mission
- Slides Tests unitaires
- Slides Responsive
- MAUI responsive (doc officielle)
Indices
- Si votre logique de session est enfouie dans le code-behind, c'est le moment de la déplacer : une classe
LearningSessionqui reçoit des cartes et exposeCurrentCard,MarkCorrect(),MarkWrong(),Summaryse teste sans émulateur.
- Le projet de tests xUnit cible la logique pure (bibliothèque de classes), pas le projet MAUI complet — voir le codelab.
- Un bon scénario de test manuel est reproductible par quelqu'un d'autre sans vous poser de question.
- Pour le responsive :
Gridavec proportions (*),OnIdiom/OnPlatform, ou le plugin OnScreenSizeMarkup.
Coup de pouce — squelette de test
csharp
public class LearningSessionTests
{
[Fact]
public void Memorization_Is_100_Percent_When_No_Errors()
{
var session = new LearningSession(...);
session.MarkCorrect();
...
Assert.Equal(100, session.Summary.MemorizationPercent);
}
}Validation
- La logique de session est dans des classes sans référence à l'UI
- La liste des cartes s'adapte à un grand écran / au mode paysage
- Au moins 3 tests unitaires passent (démonstration en direct)
- Le PDF des 3 scénarios manuels est complet et reproductible
- Aucun écran n'est cassé en rotation