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
Trueis, gaat de uitvoering stil verder.Als die
Falseis, veroorzaakt Python eenAssertionError.
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.
Corrigeer de functie.
Vervang de drie diagnostische afdrukken door asserties voor de aantallen vragen
2,3en4.Geef elke assertie een nuttig bericht.
Druk na alle asserties
Checks passed.af.
De uiteindelijke uitvoer mag alleen dit bevatten:
Checks passed.