0%

Programma’s plannen, bouwen en testen · oefening

Zet voorbeelden om in asserties

Een uitgewerkt voorbeeld wordt nuttiger wanneer het programma het voor je kan controleren. Eén controle op de gereedheid van het quizplan vereist minstens drie vragen, dus begin met die belofte:

De Python-instructie assert drukt een verwachting uit:

def has_enough_questions(question_count):
    return question_count >= 3


assert has_enough_questions(3) is True

Python evalueert de voorwaarde na assert.

  • Als die True is, gaat de uitvoering stil verder.

  • Als die False is, veroorzaakt Python een AssertionError.

Stilte is hier nuttig. Zie een assertie als een stil alarm: het maakt alleen geluid wanneer een belofte wordt gebroken.

Voeg een nuttig bericht toe

Een assertie kan een bericht bevatten:

assert has_enough_questions(3) is True, "Exactly three questions should be enough."

Als de controle mislukt, verschijnt het bericht bij de traceback. Het legt het bedoelde gedrag uit, niet de interne werking van de test.

Controleer beide kanten van een beslissing

De formulering “minstens drie” heeft een belangrijke grens. Controleer direct eronder, erop en erboven:

assert has_enough_questions(2) is False
assert has_enough_questions(3) is True
assert has_enough_questions(4) is True

Samen onderscheiden die controles >= 3 van de makkelijk te missen > 3.

Gebruik is True en is False wanneer de afspraak specifiek een booleaanse waarde belooft. Zo onderscheid je de booleaanse waarde True van andere truthy waarden zoals 1.

Asserties zijn controles voor ontwikkelaars

Een assertie is geen vriendelijke manier om echte gebruikersinvoer te valideren. Het is een korte boodschap van de ontwikkelaar aan het programma: “Dit gedrag moet geldig blijven.”

Gebruik voor gebruikersinvoer de validatie en exceptieafhandeling uit hoofdstuk 10.

Behoud controles na het herstructureren

Behoud een controle die belangrijk gedrag vastlegt terwijl je de code anders indeelt. Als het gedrag per ongeluk verandert, vertelt de mislukte assertie je dat meteen.

Wat drukt dit programma af?

def has_enough_questions(question_count):
    return question_count >= 3


assert has_enough_questions(3) is True
print("Check passed.")

Opdracht

Eén controle op de gereedheid van het quizplan slaagt wanneer het plan minstens drie vragen bevat.

De startfunctie behandelt de exacte grens verkeerd en drukt alleen drie booleaanse resultaten af.

  1. Corrigeer de functie.

  2. Vervang de drie diagnostische afdrukken door asserties voor de aantallen vragen 2, 3 en 4.

  3. Geef elke assertie een nuttig bericht.

  4. Druk na alle asserties Checks passed. af.

De uiteindelijke uitvoer mag alleen dit bevatten:

Checks passed.