Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Mocking en Testisolatie | Testing with unittest and pytest
Python Structureel Programmeren

Mocking en Testisolatie

Veeg om het menu te tonen

Mocking is een krachtige techniek in unit testing waarmee je delen van je te testen systeem kunt vervangen door mock-objecten of functies. Het doel is om de unit code die je test te isoleren van zijn afhankelijkheden, zoals databases, API's of andere complexe systemen. Door mocks te gebruiken, kun je het gedrag van afhankelijkheden beheersen en je richten op het testen van de logica van je code in een gecontroleerde omgeving.

Testisolatie is belangrijk omdat het ervoor zorgt dat tests elkaar niet beïnvloeden en niet worden beïnvloed door factoren buiten hun scope. Geïsoleerde tests zijn betrouwbaarder en eenvoudiger te debuggen omdat hun uitkomsten alleen afhangen van de geteste code en de specifieke condities die je instelt, niet van de status of het gedrag van externe systemen.

In Python biedt de module unittest.mock hulpmiddelen voor het mocken van objecten en functies. Wanneer je mocking gebruikt, kun je een echte functie of object vervangen door een mock die gecontroleerde waarden retourneert of bijhoudt hoe deze is gebruikt. Dit is vooral nuttig wanneer je code interactie heeft met bronnen die traag, onvoorspelbaar of niet beschikbaar zijn tijdens het testen.

12345678910111213141516171819202122232425
import unittest from unittest.mock import patch def check_the_sky(): # Simulate a slow or unreliable API raise ConnectionError("API not available") def get_advice(): if check_the_sky(): return "Take an umbrella." else: return "Enjoy the sunshine!" class TestWeather(unittest.TestCase): @patch('__main__.check_the_sky') def test_advice_when_rainy(self, mock_check): mock_check.return_value = True self.assertEqual(get_advice(), "Take an umbrella.") @patch('__main__.check_the_sky') def test_advice_when_clear(self, mock_check): mock_check.return_value = False self.assertEqual(get_advice(), "Enjoy the sunshine!") unittest.main(argv=[''], exit=False)

In dit codevoorbeeld simuleert de functie check_the_sky een externe afhankelijkheid die onbetrouwbaar of defect is, zoals een weer-API die mogelijk niet altijd beschikbaar is. De functie get_advice bevat de logica die je wilt testen — deze roept check_the_sky aan en geeft advies op basis van het resultaat.

De unittest-testklasse gebruikt mocking om de echte functie check_the_sky te vervangen door een mock die gecontroleerde waarden retourneert. Hierdoor kun je testen hoe get_advice zich gedraagt in verschillende scenario's, zoals wanneer de lucht helder of regenachtig is, zonder afhankelijk te zijn van het daadwerkelijke externe systeem.

De @patch-decorator wordt gebruikt om de echte functie check_the_sky tijdelijk te vervangen door een mock-object tijdens elke testmethode. Het mock-object wordt als parameter mock_check aan de testmethode doorgegeven. Je gebruikt mock_check om de gewenste returnwaarde voor die test in te stellen, zodat je kunt bepalen hoe je code zich gedraagt en wat deze retourneert in elk scenario.

Note
Opmerking

De functie unittest.main() in deze les bevat een paar extra parameters die alleen nodig zijn voor deze leeromgeving. Ze zorgen ervoor dat de code correct werkt op het platform en maken geen deel uit van de kernconcepten van Python die je nu hoeft te leren.

Door gebruik te maken van mocking, isoleer je je tests van externe systemen die traag of onbetrouwbaar kunnen zijn. Dit maakt je tests snel, herhaalbaar en deterministisch, omdat je precies bepaalt wat de afhankelijkheid in elk testgeval retourneert.

question mark

Wanneer moet je mocking gebruiken in unittests?

Selecteer alle juiste antwoorden

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 5. Hoofdstuk 4

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Sectie 5. Hoofdstuk 4
some-alt