Testimine (Testing)
Miks testida?
- Tagab, et kood töötab nii nagu oodatud.
- Aitab leida vigu varajases staadiumis.
- Võimaldab julgemalt koodi muuta ja täiendada (refaktoreerida).
- Dokumenteerib koodi käitumist.
Testimise tasemed
- Ühiktestimine (Unit testing): Testitakse koodi väikseimaid osi (funktsioonid, meetodid) isoleeritult.
- Integratsioonitestimine: Kontrollitakse süsteemi eri osade koostööd.
- Süsteemitestimine: Testitakse kogu tarkvara tervikuna.
- Aktsepttestimine: Kontrollitakse vastavust tellija ootustele.
pytest raamistik
Pythonis on levinuim testimisraamistik pytest. See on lihtne ja võimas.
- Testfailide nimed peaksid algama
test_.
- Testfunktsioonide nimed peaksid algama
test_.
- Kontrollimiseks kasutatakse tavalist Pythoni
assert lauset.
def test_addition():
assert 1 + 2 == 3
assert lause
assert kontrollib, kas sellele järgnev tingimus on tõene. Kui on väär, siis test ebaõnnestub.
assert calculate_area(2, 5) == 10
assert "Python" in "Hello Python world"
Testide käivitamine
Käsurealt käivitamiseks sisestatakse käsk:
pytest
See otsib üles kõik test_*.py failid ja käivitab seal olevad testid. Tulemustes märgitakse:
. (punkt) - test läbis.
F (failed) - test ebaõnnestus.
E (error) - testi täitmisel tekkis viga väljaspool kontrolli (nt koodi viga).
Erandite testimine
Mõnikord on vaja kontrollida, kas funktsioon viskab vea vale sisendi korral.
import pytest
def test_zero_division():
with pytest.raises(ZeroDivisionError):
1 / 0
Testide grupeerimine
Teste saab grupeerida klassidesse:
class TestCalculator:
def test_add(self):
assert 1 + 1 == 2
def test_sub(self):
assert 5 - 2 == 3
Koodi kaetus (Code Coverage)
- Näitab, kui suur osa koodist on testidega läbi käidud.
- Ei garanteeri vigade puudumist, kuid aitab leida testimata kohti.
- Tööriist:
pytest-cov.
Test-Driven Development (TDD)
- Red: Kirjutatakse test, mis ebaõnnestub (sest funktsionaalsust pole veel).
- Green: Kirjutatakse minimaalne kood, et test läbi läheks.
- Refactor: Parandatakse koodi kvaliteeti, tagades, et testid jäävad läbituks.
Kokkuvõte
- Testimine on arendusprotsessi loomulik osa.
pytest teeb testimise mugavaks.
- Head testid on kiired, sõltumatud ja kergesti loetavad.