Vandaag werken we aan twee belangrijke onderdelen van softwareontwikkeling:
Testen zorgt ervoor dat je fouten snel ontdekt, en geeft je vertrouwen dat je klassen correct werken. We doen dit zelfstandig, dus zonder al afhankelijk te zijn van andere modules of de integratie.
We gebruiken pytest als testframework omdat:
β Het eenvoudig is om te schrijven en te lezen. β Het mooie foutmeldingen geeft. β Het automatisch alle testfuncties zoekt en uitvoert.
test_*.py
(bijvoorbeeld test_puzzle.py
).test_
.π Voorbeeld:
Stel je hebt een klasse Calculator
met een methode add()
:
class Calculator:
def add(self, a, b):
return a + b
Dan schrijf je de test als volgt:
from calculator import Calculator
def test_add():
calc = Calculator()
result = calc.add(2, 3)
assert result == 5
β
assert
controleert of het resultaat is wat je verwacht.
In de terminal (in de root van je project):
pytest
Pytest zoekt automatisch alle test_*.py
bestanden en voert ze uit.
Je schrijft een testbestand voor jouw module, waarin je elke klasse en methode test.
Module | Wat testen? | Voorbeeldtest |
---|---|---|
A β puzzles | check_solution() en get_hint() van je puzzels |
Controleer of juiste/onjuiste antwoorden correct werken. |
B β users | get_role() en display_info() |
Controleer of de rol en info kloppen. |
C β core | start() , stop() , status() van Timer/Logger |
Controleer statuswijzigingen, logs. |
Stel RiddlePuzzle
is een concrete klasse van Puzzle
:
from puzzles.riddle_puzzle import RiddlePuzzle
def test_check_solution_correct():
puzzle = RiddlePuzzle("What has keys but can't open doors?", "piano")
assert puzzle.check_solution("piano") == True
def test_check_solution_incorrect():
puzzle = RiddlePuzzle("What has keys but can't open doors?", "piano")
assert puzzle.check_solution("door") == False
def test_get_hint():
puzzle = RiddlePuzzle("vraag", "antwoord")
hint = puzzle.get_hint()
assert isinstance(hint, str)
Elke testfunctie krijgt een korte comment of docstring waarin je uitlegt wat je test en waarom.
Bijvoorbeeld:
def test_check_solution_correct():
"""Test of een correct antwoord True teruggeeft."""
...
Vandaag kies je één branch van een klasgenoot om na te lezen.
Leesbaarheid van de code:
Klopt de implementatie met het klassendiagram?
Testen:
main
(maar nog niet mergen!).Voeg opmerkingen toe in de review:
β
Maak een tests/
map in jouw modulemap (bijv. puzzles/tests/
).
β
Maak een test_*.py
bestand.
β
Schrijf per klasse en methode minstens 1 testfunctie.
β
Voeg docstrings toe aan je tests.
β
Voer je tests uit met pytest
.
β
Controleer dat ze slagen (geen errors of failures).
β
Fix je code als er tests falen.
β
Kies een branch van een klasgenoot (A β B, B β C, C β A).
β
Lees de klassen en tests na.
β
Open een pull request van hun branch naar main
.
β
Voeg minstens 3 inhoudelijke opmerkingen toe:
pytest
.