Exercices Architecture & Patterns Fixtures simples
🎉

Bravo!

Intermédiaire 🧠 Fondamentaux 20 XP 0 personnes ont réussi

Fixtures simples

Quand tu ecris des tests pour une appli e-commerce, tu as besoin des memes donnees partout : un utilisateur test, un panier avec des articles, des produits avec des prix. Plutot que de copier-coller ces donnees dans chaque test, tu les centralises dans une fixture.

Une fixture, c'est une fonction qui prepare et renvoie des donnees fraiches pour les tests. Pense a un decor de theatre qu'on installe avant chaque scene : chaque test commence avec un etat propre et previsible.

En Python, une fixture peut etre une simple fonction :

def fixture_utilisateur():
return {"nom": "Alice", "email": "alice@test.com", "age": 30}

def fixture_produits():
return [
{"nom": "Clavier", "prix": 49.99},
{"nom": "Souris", "prix": 29.99},
]

L'avantage est triple : tes données de test sont au meme endroit, chaque test commence avec des données fraiches (pas de pollution entre les tests), et si la structure des données change, tu ne modifies qu'un seul endroit.

Écris une classe TestPanier qui teste un système de panier de courses. La classe doit contenir :

fixture() : méthode qui renvoie un dictionnaire representant un panier avec les clés "articles" (liste de dicts avec "nom" et "prix"), et "reduction" (un float entre 0 et 1, par ex 0.1 pour 10%).

total(panier) : méthode qui calcule le total du panier apres reduction.

test_total_normal() : teste le total avec la fixture.
test_total_panier_vide() : teste un panier sans articles.
test_total_sans_reduction() : teste un panier avec reduction a 0.
test_total_reduction_totale() : teste un panier avec reduction a 1 (100%).

run() : exécute tous les tests et renvoie un dict {nom_du_test: True/False}.

Exemple :

t = TestPanier()
t.run() renvoie {'test_total_normal': True, 'test_total_panier_vide': True, 'test_total_sans_reduction': True, 'test_total_reduction_totale': True}

Tests (4/5)

Les 4 tests passent
t = TestPanier()
r = t.run()
assert all(r.values()), f'Tous les tests devraient passer mais on a {r}'
4 tests minimum
t = TestPanier()
r = t.run()
assert len(r) >= 4, f'Il faut au moins 4 tests, tu en as {len(r)}'
La fixture renvoie le bon format
t = TestPanier()
f = t.fixture()
assert 'articles' in f and 'reduction' in f, 'La fixture doit avoir les clés articles et reduction'
assert isinstance(f['articles'], list), 'articles doit etre une liste'
assert isinstance(f['reduction'], float), 'reduction doit etre un float'
Le total est correct
t = TestPanier()
assert t.total({'articles': [{'nom': 'A', 'prix': 100}], 'reduction': 0.2}) == 80.0, 'Le total de 100 avec 20% de reduction devrait etre 80'

+ 0 tests cachés

Indices (3 disponibles)

solution.py