Exercices Architecture & Patterns Tester une classe complete
🎉

Bravo!

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

Tester une classe complete

Tester une methode isolee, c'est bien. Mais les vrais bugs apparaissent quand les methodes interagissent entre elles. Un compte bancaire peut accepter les depots et les retraits correctement chacun de leur cote, mais planter quand tu fais un depot suivi d'un retrait. Il faut tester les sequences d'operations.

Voici une classe CompteBancaire :

class CompteBancaire:
def __init__(self, solde=0):
self.solde = solde

def deposer(self, montant):
if montant <= 0:
raise ValueError("Le montant doit etre positif")
self.solde += montant

def retirer(self, montant):
if montant <= 0:
raise ValueError("Le montant doit etre positif")
if montant > self.solde:
raise ValueError("Solde insuffisant")
self.solde -= montant

def get_solde(self):
return self.solde

Pour bien tester cette classe, il faut vérifier :
- La création du compte (avec et sans solde initial)
- Les depots normaux
- Les retraits normaux
- Les erreurs (depot negatif, retrait superieur au solde)
- Une sequence d'opérations

Écris une fonction tester_compte() qui crée des instances de CompteBancaire et les teste. La fonction doit contenir au moins 6 assert differents couvrant ces cas. Elle renvoie "OK" si tout passe.

Exemple :

tester_compte() renvoie "OK"

Tests (4/5)

Les tests passent
assert tester_compte() == 'OK', 'tester_compte() devrait renvoyer OK'
Teste la création du compte
import inspect
src = inspect.getsource(tester_compte)
assert 'CompteBancaire()' in src or 'CompteBancaire(0)' in src, 'Tu dois tester la création du compte sans argument'
Teste les exceptions
import inspect
src = inspect.getsource(tester_compte)
assert 'ValueError' in src, 'Tu dois tester que les erreurs levent bien une ValueError'
Au moins 6 assert
import inspect
src = inspect.getsource(tester_compte)
assert src.count('assert') >= 6, f'Tu dois avoir au moins 6 assert, tu en as {src.count("assert")}'

+ 0 tests cachés

Indices (3 disponibles)

solution.py