Contenu du cours
Concepts Avancés de Python
Concepts Avancés de Python
Technique de Simulation
Tester du code qui dépend de services externes, de configurations ou qui a des effets secondaires peut être difficile. Le mock est une technique puissante qui simule le comportement d'interactions complexes du monde réel dans les tests sans leur complexité et leur imprévisibilité.
Par exemple, si vous devez tester un service d'échange d'argent, une option pourrait consister à utiliser vos propres fonds pour simuler des transactions et observer les résultats. Cependant, cette méthode peut être risquée et coûteuse. Une alternative plus efficace et sans risque est d'utiliser le mock pour émuler le processus d'envoi d'argent.
Tester un Service de Transfert d'Argent
class MoneyTransferService:
def transfer(self, source_account, destination_account, amount):
if source_account.balance < amount:
raise ValueError("Insufficient funds")
source_account.balance -= amount
destination_account.balance += amount
return True
L'Approche de Test :
- Mocker les Soldes des Comptes : utiliser le mock pour simuler différents états de compte, tels que des fonds insuffisants ou des fonds suffisants, pour tester comment la méthode de transfert réagit ;
- Vérifier les Transactions : confirmer que les montants appropriés sont débités et crédités des comptes respectifs lors d'un transfert ;
- Gérer les Exceptions : s'assurer que la méthode gère correctement les scénarios où le transfert ne peut pas être effectué.
import unittest
from unittest.mock import MagicMock
class TestMoneyTransferService(unittest.junit.TestCase):
def setUp(self):
self.transfer_service = MoneyTransferService()
self.source_account = MagicMock()
self.destination_account = MagicMock()
def test_successful_transfer(self):
# Set up the account balances
self.source_account.balance = 1000
self.destination_account.balance = 500
# Perform the transfer
successful = self.transfer_service.transfer(self.source_account, self.destination_account, 200)
# Check balances
self.assertTrue(successful)
self.assertEqual(self.source_account.balance, 800)
self.assertEqual(self.destination_account.balance, 700)
def test_failed_transfer_due_to_insufficient_funds(self):
# Set up the account balances
self.source_account.balance = 100
self.destination_account.balance = 500
# Attempt to transfer more than the source balance
with self.assertRaises(ValueError):
self.transfer_service.transfer(self.source_account, self.destination_account, 200)
# Verify that balances remain unchanged
self.assertEqual(self.source_account.balance, 100)
self.assertEqual(self.destination_account.balance, 500)
Tout était clair ?
Merci pour vos commentaires !
Section 5. Chapitre 4