Der Gratisversand ging nicht mehr
Eine Kundin bestellt für genau 50 €. Die Seite verspricht ab 50 € Gratisversand. Sie zahlte trotzdem 3,99 €.
Letzte Woche hat jemand ein einziges Zeichen geändert. Niemand hat es bemerkt, weil nichts es geprüft hat. Ein Test ist ein kleines Stück Code, das es bemerkt hätte.
Am Ende dieser Lektion
Notiz
Ich kann einen Test schreiben, der eine Funktion prüft.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Test | Code, der prüft, ob anderer Code richtig antwortet | |
| Assert | eine Zeile, die mit Fehler stoppt, wenn etwas falsch ist | assert versand == 0 |
| Erwartet | die Antwort, die die Funktion geben soll | |
| Tatsächlich | die Antwort, die die Funktion wirklich gibt | |
| Randfall | ein Wert genau an einer Grenze, wo Fehler sich verstecken | 5000 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Test vergleicht erwartet und tatsächlich
Jeder Test stellt eine Frage: Gibt die Funktion die richtige Antwort?
Sie schreiben die erwartete Antwort auf. Dann führen Sie die Funktion aus und erhalten die tatsächliche Antwort. assert vergleicht beide.
Sind sie gleich, passiert nichts, der Test besteht. Sind sie verschieden, stoppt Python mit einem AssertionError.
Ausprobieren: ein erster Test
def versandkosten(summe_in_cent):
# Ab 5000 Cent (50 Euro) ist der Versand frei.
if summe_in_cent >= 5000:
return 0
return 399
erwartet = 399
tatsaechlich = versandkosten(1200)
print("Erwartet:", erwartet, "Tatsächlich:", tatsaechlich)
assert tatsaechlich == erwartet
print("Test bestanden")
Testen Sie die Ränder, nicht nur die Mitte
Ein Test mit 1200 Cent und einer mit 9000 Cent bestehen beide, auch wenn ein Fehler im Code steckt. Fehler verstecken sich am Rand: genau da, wo die Regel wechselt.
Bei „frei ab 50 €“ testen Sie knapp darunter, genau darauf und knapp darüber.
Beispiel: Tests für den Gratisversand
| Bestellung (Cent) | Warum dieser Wert | Erwarteter Versand | Mit dem >-Fehler |
|---|---|---|---|
| 1200 | Eine normale kleine Bestellung | 399 | 399, besteht |
| 4999 | Ein Cent unter der Grenze | 399 | 399, besteht |
| 5000 | Genau auf der Grenze | 0 | 399, scheitert |
| 9000 | Eine normale große Bestellung | 0 | 0, besteht |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein häufiger Fehler
Warnung
Viele denken, ein bestandener Test beweise, dass der Code stimmt. Ein Test prüft nur die Werte, die Sie gewählt haben. Wer den Rand nie testet, übersieht einen Fehler genau dort.
Üben: den Fehler am Rand finden
def versandkosten(summe_in_cent):
# Jemand hat aus >= versehentlich > gemacht.
if summe_in_cent > 5000:
return 0
return 399
assert versandkosten(1200) == 399
print("Kleine Bestellung: bestanden")
assert versandkosten(9000) == 0
print("Große Bestellung: bestanden")
# Fügen Sie einen weiteren assert für genau 5000 Cent hinzu.
# Welcher Versand ist dort richtig? Drücken Sie Run und lesen Sie die Meldung.
Tests sind Funktionen mit dem Namen test_
Im Beruf ist jeder Test eine eigene Funktion, deren Name mit test_ beginnt. Ein Testprogramm wie pytest findet alle und führt sie aus.
Eine Funktion prüft eine Idee. Ihr Name nennt die Idee: test_genau_vierzig. Scheitert sie, sagt der Name Ihnen, was kaputt ist.