Kuidas kirjutada teste

Testide kirjutamiseks tuleb eelkõige kindlaks teha, mida peab testitav funktsioon tegema ja mida see peab erinevate argumentide korral tagastama. Siis tuleb välja mõelda erinevaid argumentide kombinatsioone, mis võivad võimalikult palju vigu tuvastada.

Proovime välja mõelda natuke teste ühe funktsiooni jaoks. Olgu meil on funktsioon ruutvõrrandi (ax^2 + bx + c = 0) lahendamiseks. See võtab ette 3 argumenti (a, b, c) ja tagastab listi. Kui lahendusi ei ole, siis list peab olema tühi. Vastasel juhul listis on lahendid suvalises järjekorras.

def quadratic_solution(a, b, c):
        ...

See on kõik, mida testijal on vaja teada, et funktsiooni testida. Mida võib siin testida? Tuleb lihtsalt proovida erinevaid argumente ja kontrollida vastust.

  1. Erinevad a, b, c. (positiivsed, negatiivsed)

  2. Kui a/b/c on 0 või nad on kõik nullid.

  3. Kas on lahendid või ei ole.

Üksustestidega ei saa alati katta kõike võimalikke olukordi. On oluline, et kõige olulisemad olukorrad oleksid kaetud.

Testid kirjutatakse tavaliselt eraldi moodulisse (faili). See moodul koosneb funktsioonidest ja iga funktsioon testib ühte olukorda.

Testid peavad olema võimalikult lihtsad ja väga konkreetsed.

assert lause

assert lausega kontrollitakse alamprogrammi (näiteks funktsiooni) töötamise korrektsust. Kui väljund on õige, siis Pythoni interpretaator jätkab koodi käivitamist, ja kui ei ole õige, siis viskab AssertionError erindi.

assert [boolean expression]
# boolean expression is an expression that returns True/False.
# i.e. True, False, 5 > 3, 5 <= 3, a == b, z in [5, 6, 1]

assert -1 in quadratic_solution(5, 6, 1)
assert len(quadratic_solution(-8, 1, -10)) == 0
assert 45 > 107 # throws AssertionError, because 45 > 107 is always False

Kui test ebaõnnestub

Põhjused:

  1. Kas funktsioon annab vale tulemuse

  2. või test on valesti kirjutatu (nõuab valet vastust)

Esimene põhjus on programmeerija probleem, teine põhjus on testija probleem.