🧩 Escape Room Project – Les 5: Testen en Feedback

🎯 Doelen van deze les

Vandaag werken we aan twee belangrijke onderdelen van softwareontwikkeling:

  1. Je eigen code testen: controleren of je klassen correct werken, zonder afhankelijk te zijn van de andere modules.
  2. Elkaars code reviewen: leren lezen, begrijpen en verbeteren van andermans code via GitHub.

πŸ“š 1. Testen met pytest

➑️ Waarom testen we?

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.


πŸ“ Hoe schrijf je een test met pytest?

πŸ”Ή Structuur van een testbestand:

  • Je testbestand heet test_*.py (bijvoorbeeld test_puzzle.py).
  • Elke testfunctie begint met 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.


πŸ–₯️ Je tests uitvoeren:

In de terminal (in de root van je project):

pytest

Pytest zoekt automatisch alle test_*.py bestanden en voert ze uit.


πŸ“š 2. Wat moet jij vandaag testen?

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.

πŸ” Voorbeeld: test voor een puzzel

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)

πŸ“ Docstrings niet vergeten!

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."""
    ...

πŸ“š 3. Peer review op GitHub

➑️ Waarom reviewen we elkaars code?

  • Je leert hoe anderen problemen oplossen.
  • Je ziet verschillende stijlen en keuzes.
  • Je oefent in duidelijk communiceren over code.

Vandaag kies je één branch van een klasgenoot om na te lezen.


πŸ” Waar let je op tijdens de review?

  1. Leesbaarheid van de code:

    • Zijn de namen duidelijk?
    • Zijn er docstrings?
    • Is de structuur logisch?
  2. Klopt de implementatie met het klassendiagram?

    • Zijn alle methoden aanwezig?
    • Zijn de attributen goed gekozen?
  3. Testen:

    • Zijn er voldoende tests?
    • Testen ze de belangrijkste functionaliteit?

πŸ“ Hoe doe je een review op GitHub?

  1. Ga naar de branch van je klasgenoot op GitHub.
  2. Bekijk de bestanden (klassen en tests).
  3. Open een pull request vanuit die branch naar main (maar nog niet mergen!).
  4. Voeg opmerkingen toe in de review:

    • Klik op een regel β†’ Add comment.
    • Geef positieve feedback Γ©n verbeterpunten.
  5. Markeer de review als β€œComment” (niet β€œApprove” of β€œRequest changes” als je dat niet wilt).

πŸ“ Opdracht – Stap voor stap

πŸ”Ή 1. Schrijf je tests

βœ… 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.


πŸ”Ή 2. Run je tests

βœ… Voer je tests uit met pytest. βœ… Controleer dat ze slagen (geen errors of failures). βœ… Fix je code als er tests falen.


πŸ”Ή 3. Review de code van een klasgenoot

βœ… 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:

  • 1 over leesbaarheid/documentatie.
  • 1 over structuur/design.
  • 1 over tests/functionaliteit.

βœ… Tegen het einde van deze les:

  • Je hebt een volledig testbestand geschreven voor jouw module.
  • Je hebt alle tests succesvol uitgevoerd met pytest.
  • Je hebt een review ingediend op de branch van een klasgenoot.

Previous section:
Next section:
Navigatie