Unit Testen
1 Wat is testen? Waarom is het belangrijk?
đ¯ Leerdoelen
- Je begrijpt wat testen is en waarom we het doen.
- Je herkent verschillende soorten testen.
- Je kunt een eenvoudige functie handmatig testen.
đĄ Uitleg
Testen betekent controleren of je code het juiste doet. Als je iets verandert, wil je zeker weten dat het nog steeds werkt. Denk aan:
- Een rekenmachine die ineens verkeerde antwoorden geeft.
- Een webshop die verkeerde prijzen toont.
Daarom testen we onze code â om fouten te voorkomen en vertrouwen te krijgen in wat we gemaakt hebben.
đ Testsoorten
Er zijn verschillende soorten testen. Hieronder zie je een overzicht:
Testsoort | Wat test je? | Voorbeeld |
---|---|---|
Unit test | ÃÊn functie of klein onderdeel | Klopt bereken_korting() ? |
Integratietest | Samenwerking tussen onderdelen | Voegt bereken_korting() + bereken_verzendkosten() alles goed op? |
Systeemtest | Het hele programma | Werkt de volledige webshop van begin tot eind? |
Acceptatietest | Voldoet het aan de wensen van de gebruiker? | Kan de klant een product kiezen en succesvol bestellen? |
In deze lessenserie focussen we op unit tests: kleine, duidelijke tests waarmee je functies controleert.
đ ī¸ Opdracht 1 â winkelmandje.py
Maak een nieuw Python-bestand aan met de naam winkelmandje.py
en doe het volgende:
- Schrijf een functie
bereken_totaalprijs(prijzen)
die een lijst van prijzen optelt. - Voorbeeld:
bereken_totaalprijs([2.50, 4.00, 3.25])
moet9.75
opleveren. - Print het resultaat van je functie met verschillende lijsten.
- Probeer ook een lege lijst â wat gebeurt er?
đ§ Reflectie
- Welk van de testsoorten vind jij het belangrijkste? Leg in eigen woorden uit waarom!
- Wat gebeurt er als je iets fout typt in je functie?
- Wat als je functie 3 keer voorkomt in een groter programma â hoe test je dat?
- Hoe zou je dit automatisch kunnen controleren?
đ¤ Inleveren
- Lever het bestand
winkelmandje.py
in (.py). - Beantwoord de drie reflectievragen in een apart .txt of .pdf bestand.
2 Je eerste unit test schrijven
đ¯ Leerdoelen
- Je kunt een eenvoudige test schrijven met de module
unittest
. - Je weet wat
assertEqual()
doet. - Je voert je testbestand uit en controleert of het slaagt.
đĄ Uitleg
In de vorige les heb je een functie gemaakt die de totaalprijs berekent van een lijst met bedragen. Nu ga je leren hoe je automatisch kunt testen of die functie goed werkt.
Hiervoor gebruik je de module unittest
. Je schrijft testfuncties waarin je verwacht wat de uitkomst moet zijn. Als die klopt, krijg je een groene melding. Als die fout is, zie je precies waar het misgaat.
Voorbeeldtest:
import unittest
def bereken_totaalprijs(prijzen):
totaal = 0
for prijs in prijzen:
totaal += prijs
return totaal
class TestTotaalprijs(unittest.TestCase):
def test_drie_bedragen(self):
self.assertEqual(bereken_totaalprijs([2.50, 4.00, 3.25]), 9.75)
def test_lege_lijst(self):
self.assertEqual(bereken_totaalprijs([]), 0)
def test_een_bedrag(self):
self.assertEqual(bereken_totaalprijs([5.00]), 5.00)
def test_nog_een_bedrag(self):
self.assertEqual(bereken_totaalprijs([5.00, 2.00]), 8.00)
if __name__ == '__main__':
unittest.main()
Je voert het testbestand uit met:
python totaalprijs_test.py
đ ī¸ Opdracht 1 â totaalprijs_test.py
Je gaat nu je eigen functie bereken_totaalprijs()
uit les 1 testen.
- Maak een nieuw bestand aan:
totaalprijs_test.py
. - Kopieer je functie
bereken_totaalprijs(prijzen)
uitwinkelmandje.py
. - Schrijf een testklasse
TestTotaalprijs
waarin je de functie test metunittest
. - Schrijf minstens drie tests:
- Lijst met meerdere bedragen (bijv.
[2.50, 3.50]
) â controleer of totaal klopt. - Lege lijst â verwacht
0
. - Lijst met ÊÊn bedrag â verwacht dat bedrag.
- Lijst met meerdere bedragen (bijv.
- Voer je bestand uit in de terminal met
python totaalprijs_test.py
.
đ§ Reflectie
- Wat gebeurt er als een test slaagt? En als hij faalt?
- Wat zijn de voordelen van automatisch testen vergeleken met handmatig printen?
- Hoe weet je zeker dat je test goed geschreven is?
đ¤ Inleveren
- Lever het bestand
totaalprijs_test.py
in (.py). - Lever een .txt of .pdf-bestand in met antwoorden op de reflectievragen.