Ein Test zeigt, ob der Vorschlag wirklich stimmt
Generierten Code zu testen heißt, ihn mit Eingaben zu starten, deren richtiges Ergebnis Sie vorher kennen. Ein Test ist die Antwort auf die Frage, ob dem Vorschlag zu trauen ist.
Ein Assistent schreibt eine Funktion, die Cent als Euro ausgibt. Sie läuft bei 180 Cent. Erst ein Test mit 5 Cent zeigt, ob sie überall stimmt.
Am Ende dieser Lektion
Notiz
Ich kann Testfälle aus der Anforderung wählen und damit generierten Code prüfen.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Testfall | eine Eingabe mit dem Ergebnis, das Sie dafür erwarten | |
| Anforderung | der Satz, der sagt, was der Code tun soll | |
| Randfall | ein Testfall am Rand des erlaubten Bereichs | 0 und 5 Cent |
| Grenzwert | der letzte Wert, bei dem sich das Ergebnis ändert | 49 und 50 |
| Erwartungswert | das Ergebnis, das Sie vor dem Lauf selbst ausrechnen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Testfälle folgen der Anforderung, nicht dem Code
Leiten Sie Ihre Testfälle aus der Anforderung ab, also aus dem, was der Code tun soll. Lesen Sie sie nicht aus dem Code ab.
Wer die Erwartung aus dem Code ableitet, übernimmt dessen Fehler. Rechnen Sie jeden Erwartungswert selbst aus, bevor Sie den Code starten.
Ein Beispiel: Testfälle für einen Euro-Text
| Art | Eingabe in Cent | Erwartungswert | Was der Fall prüft |
|---|---|---|---|
| Normal | 180 | 1,80 € | Die gewöhnliche Rechnung |
| Mit Null im Rest | 105 | 1,05 € | Der Rest hat zwei Stellen |
| Randfall | 0 | 0,00 € | Der kleinste Wert |
| Randfall | 5 | 0,05 € | Weniger als ein Euro |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Vier Fälle gegen einen Vorschlag
# Ein Vorschlag, der "Cent als Euro-Text" ausgeben soll.
def euro_text(cent):
euro = cent // 100
rest = cent % 100
return str(euro) + "," + str(rest) + " €"
# Die erwarteten Texte haben Sie vorher selbst ausgerechnet.
faelle = [[180, "1,80 €"], [105, "1,05 €"], [0, "0,00 €"], [5, "0,05 €"]]
for fall in faelle:
bekommen = euro_text(fall[0])
if bekommen == fall[1]:
print(fall[0], "ok")
else:
print(fall[0], "FEHLER, erwartet", fall[1], "bekommen", bekommen)
Warum der normale Fall nicht reicht
Der erste Fall, 180, besteht. Die anderen drei Fälle zeigen FEHLER, denn der Rest 5 wird als „5“ statt als „05“ geschrieben.
Hätten Sie nur 180 getestet, wäre der Vorschlag durchgegangen. Die Randfälle fanden den Fehler. Ändern Sie den Code so, dass der Rest zweistellig wird, und starten Sie neu.
Ein häufiger Fehler
Warnung
Viele lassen den Assistenten Code und Tests zugleich schreiben und halten beides für geprüft. Dieselbe falsche Annahme steckt dann in beiden. Rechnen Sie wenigstens die Erwartungswerte selbst aus und lesen Sie jeden Test einzeln.
Im Lab lassen Sie Randwerte laufen
Das Lab-Projekt hat eine Funktion asPounds, die Pence als Text mit Pfundzeichen ausgibt. Sie probieren sie mit Randwerten aus, ohne etwas zu ändern.
Danach lassen Sie die Tests des Projekts laufen und lesen nur die Zählung am Ende.
Einen kleinen Wert ausprobieren
docker exec -w /home/node/project agent node -e "console.log(require('./shop').asPounds(5))"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Null und einen größeren Wert ausprobieren
docker exec -w /home/node/project agent node -e "const s = require('./shop'); console.log(s.asPounds(0), s.asPounds(1999))"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Zählung der Projekttests lesen
docker exec -w /home/node/project agent node --test 2>&1 | grep -E "^# (tests|pass|fail)"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Was die Läufe zeigen
Die ersten beiden Befehle geben £0.05, dann £0.00 £19.99 aus. Die Funktion asPounds besteht diese Randfälle.
Der dritte Befehl zählt die Projekttests: im unveränderten Projekt # tests 5, # pass 4 und # fail 1. Ein roter Test sagt Ihnen, dass noch etwas zu prüfen ist.