Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Mocking-Technik | Unittest-Framework
Python Fortgeschrittene Konzepte
course content

Kursinhalt

Python Fortgeschrittene Konzepte

Python Fortgeschrittene Konzepte

1. Module und Importe
2. Fehlerbehandlung
3. Dateiverwaltung
4. Pytest Framework
5. Unittest-Framework
6. Iteratoren und Generatoren

book
Mocking-Technik

Das Testen von Code, der von externen Diensten, Konfigurationen abhängt oder Nebeneffekte hat, kann eine Herausforderung sein. Mocking ist eine leistungsstarke Technik, die das Verhalten komplexer realer Interaktionen innerhalb von Tests simuliert, ohne deren Komplexität und Unvorhersehbarkeit.

Wenn Sie beispielsweise einen Geldwechselservice testen müssen, könnte eine Option darin bestehen, Ihre eigenen Mittel zu verwenden, um Transaktionen zu simulieren und die Ergebnisse zu beobachten. Diese Methode kann jedoch riskant und kostspielig sein. Eine effizientere und risikofreie Alternative ist die Verwendung von Mocking, um den Prozess des Geldsendens zu emulieren.

Testen eines Geldüberweisungsdienstes

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

Der Testansatz:

  1. Mocken der Kontostände: Verwenden Sie Mocking, um verschiedene Kontozustände zu simulieren, wie z.B. unzureichende Mittel oder ausreichende Mittel, um zu testen, wie die Transfermethode reagiert;
  2. Transaktionen überprüfen: Bestätigen Sie, dass die entsprechenden Beträge während einer Überweisung von den jeweiligen Konten abgebucht und gutgeschrieben werden;
  3. Ausnahmen behandeln: Stellen Sie sicher, dass die Methode Szenarien korrekt behandelt, in denen die Überweisung nicht abgeschlossen werden kann.
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)

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 5. Kapitel 4

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

course content

Kursinhalt

Python Fortgeschrittene Konzepte

Python Fortgeschrittene Konzepte

1. Module und Importe
2. Fehlerbehandlung
3. Dateiverwaltung
4. Pytest Framework
5. Unittest-Framework
6. Iteratoren und Generatoren

book
Mocking-Technik

Das Testen von Code, der von externen Diensten, Konfigurationen abhängt oder Nebeneffekte hat, kann eine Herausforderung sein. Mocking ist eine leistungsstarke Technik, die das Verhalten komplexer realer Interaktionen innerhalb von Tests simuliert, ohne deren Komplexität und Unvorhersehbarkeit.

Wenn Sie beispielsweise einen Geldwechselservice testen müssen, könnte eine Option darin bestehen, Ihre eigenen Mittel zu verwenden, um Transaktionen zu simulieren und die Ergebnisse zu beobachten. Diese Methode kann jedoch riskant und kostspielig sein. Eine effizientere und risikofreie Alternative ist die Verwendung von Mocking, um den Prozess des Geldsendens zu emulieren.

Testen eines Geldüberweisungsdienstes

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

Der Testansatz:

  1. Mocken der Kontostände: Verwenden Sie Mocking, um verschiedene Kontozustände zu simulieren, wie z.B. unzureichende Mittel oder ausreichende Mittel, um zu testen, wie die Transfermethode reagiert;
  2. Transaktionen überprüfen: Bestätigen Sie, dass die entsprechenden Beträge während einer Überweisung von den jeweiligen Konten abgebucht und gutgeschrieben werden;
  3. Ausnahmen behandeln: Stellen Sie sicher, dass die Methode Szenarien korrekt behandelt, in denen die Überweisung nicht abgeschlossen werden kann.
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)

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 5. Kapitel 4
some-alt