Een echt project testen · oefening
Lees het resultaat en test één verhaal
De eerste punt was nuttig omdat pytest één functie had verzameld. Een overzicht kan ook vertellen waarom er nog geen betrouwbaar bewijs van geslaagde tests is.
De siteomgeving bevat de vastgezette pytest-versie van de cursus al. Vanaf deze les gebruikt python -m pytest die omgeving, dus het verdwijnen van de tijdelijke .venv blokkeert de oefeningen op de site niet. Blijf op je eigen computer de Python van je projectomgeving gebruiken met -m pytest.
Voer de tests uit en vraag Bash daarna om de processtatus:
python -m pytest -q
echo $?
Lees de uitkomst voordat je de productiecode bewerkt:
| Status | Betekenis hier |
|---|---|
0 | er zijn tests verzameld en ze zijn allemaal geslaagd |
1 | er zijn tests verzameld en minstens één test is gefaald |
2 | het verzamelen is onderbroken, vaak door een import- of syntaxisfout |
5 | pytest heeft geen tests verzameld |
Status 2 is geen mislukte verwachting. Repareer eerst het probleem met verzamelen of importeren. Status 5 is ook geen succes: geen enkele test heeft productiegedrag waargenomen.
Laat één test één verhaal vertellen
Open de testmodule en breid het voorbeeld met gelijke waarden uit:
nano tests/test_catalog.py
Houd drie zichtbare stappen aan:
def test_equal_quantity_is_included():
# Arrange
item = {"sku": "EQ-4", "quantity": 4}
items = [item]
# Act
selected = select_items(items, 4)
# Assert
assert selected == [item]
Arrange maakt de invoer en de grens van de verwachting klaar. Act voert één publiek gedrag uit. Assert vergelijkt het waarneembare resultaat. De commentaarregels zijn tijdelijke wegwijzers, geen bijzondere syntaxis. De scheiding voorkomt dat bij een latere fout drie mogelijke oorzaken op één regel door elkaar lopen.
Voer pytest opnieuw uit. Als er een test faalt, begin dan bij de verwachte en werkelijke waarden van de assertie en onderzoek daarna het binnenste relevante projectframe. “Repareer” het verzamelen niet door de functie een andere naam te geven zodat die verdwijnt.
Wat bewijst pytest-status 5?
Het geval met gelijke waarden is groen. Dezelfde inclusieve regel heeft ook aangrenzende gevallen. Hierna leg je die vast zonder de hele functie drie keer te kopiëren.
Als pytest iets meldt dat je niet kunt duiden, plak dan het hele overzicht bij Monty en vraag wat de statuscode betekent voordat je code verandert. De verkeerde laag repareren kost meer tijd dan de melding lezen.
Opdracht
Behoud in tests/test_catalog.py een verzamelde test voor de gelijkheidsgrens. Bereid het item en de lijst voor, voer één aanroep van select_items uit en controleer de teruggegeven lijst met een assertie. Voer pytest uit en los problemen met verzamelen of ontbrekende tests op voordat je een assertieresultaat als bewijs behandelt.