Python ima standardni modul doctest, ki preizkusi vsebino niza dokumentov, kar olajša pisanje vhodnih in izhodnih primerov v nizu dokumentov in olajša razumevanje dokumentacije.
Tu so na voljo naslednje informacije.
- Preprost primer testiranja s programom doctest
- Če ni napake
- Če se pojavi napaka
- Nadzor izhodnih rezultatov z možnostmi in argumenti
-v
Možnostverbose
argument (npr. funkcija, program, program)
- Zagon modula doctest iz ukazne vrstice
- Pisanje testov v zunanjo besedilno datoteko
- Kako napisati besedilno datoteko
- Klican iz datoteke py
- Neposredno izvajanje besedilne datoteke
Preprost primer testiranja s programom doctest
Dokumentni niz je niz, ki je zaprt z enim od naslednjih elementov: (1) ime funkcije, ki jo je treba preizkusiti, (2) ime funkcije, ki jo je treba preizkusiti, in (3) pričakovana izhodna vrednost v interaktivnem načinu Pythona.
"""
'''
Če ni napake
Prepričajte se, da je koda v funkciji in vsebini vrstice dokumenta pravilna.
def add(a, b):
'''
>>> add(1, 2)
3
>>> add(5, 10)
15
'''
return a + b
if __name__ == '__main__':
import doctest
doctest.testmod()
Zaženite to datoteko.
$ python3 doctest_example.py
Če ni napak, se ne izpiše nič.
if __name__ == '__main__'
To pomeni “izvedi nadaljnjo obdelavo samo, ko se ustrezna datoteka skript izvede iz ukazne vrstice.
Če se pojavi napaka
Če ustvarite in izvedete naslednjo napačno kodo, se izpiše napaka.
def add(a, b):
'''
>>> add(1, 2)
3
>>> add(5, 10)
10
'''
return a * b
if __name__ == '__main__':
import doctest
doctest.testmod()
$ python3 doctest_example_error.py
**********************************************************************
File "doctest_example_error.py", line 3, in __main__.add
Failed example:
add(1, 2)
Expected:
3
Got:
2
**********************************************************************
File "doctest_example_error.py", line 5, in __main__.add
Failed example:
add(5, 10)
Expected:
10
Got:
50
**********************************************************************
1 items had failures:
2 of 2 in __main__.add
***Test Failed*** 2 failures.
To je prikazano na naslednji način.
Pričakovane izhodne vrednosti, zapisane v doctestu. | Expected |
Dejanska izhodna vrednost | Got |
Nadzor izhodnih rezultatov z možnostmi in argumenti
-vMožnost
Če želite, da se rezultati prikažejo tudi, če ni napak, zaženite ukaz z možnostjo -v v ukazni vrstici.
$ python3 doctest_example.py -v
Trying:
add(1, 2)
Expecting:
3
ok
Trying:
add(5, 10)
Expecting:
15
ok
1 items had no tests:
__main__
1 items passed all tests:
2 tests in __main__.add
2 tests in 2 items.
2 passed and 0 failed.
Test passed.
verboseargument (npr. funkcija, program, program)
Če želite vedno prikazati izhodne rezultate, v datoteki py v ukazu doctest.testmod() določite argument verbose=True.
if __name__ == '__main__':
import doctest
doctest.testmod(verbose=True)
Izhodni rezultati bodo med izvajanjem vedno prikazani brez možnosti -v.
$ python3 doctest_example_verbose.py
Trying:
add(1, 2)
Expecting:
3
ok
Trying:
add(5, 10)
Expecting:
15
ok
1 items had no tests:
__main__
1 items passed all tests:
2 tests in __main__.add
2 tests in 2 items.
2 passed and 0 failed.
Test passed.
Zagon modula doctest iz ukazne vrstice
if __name__ == '__main__'
Če želite v njem narediti kaj drugega, lahko modul doctest zaženete neposredno iz ukazne vrstice, ne da bi v datoteki py klicali doctest.testmod().
Na primer v naslednjih primerih
def add(a, b):
'''
>>> add(1, 2)
3
>>> add(5, 10)
15
'''
return a + b
if __name__ == '__main__':
import sys
result = add(int(sys.argv[1]), int(sys.argv[2]))
print(result)
Sprejema lahko argumente ukazne vrstice in izvede postopek kot običajno.
$ python3 doctest_example_without_import.py 3 4
7
Če zaženete doctest kot skripto z možnostjo -m, se bo test izvajal v funkciji, v kateri je zapisan doctest. Če želite prikazati izhodne rezultate, dodajte -v kot prej.
$ python3 -m doctest doctest_example_without_import.py
$ python3 -m doctest -v doctest_example_without_import.py
Trying:
add(1, 2)
Expecting:
3
ok
Trying:
add(5, 10)
Expecting:
15
ok
1 items had no tests:
doctest_example_without_import
1 items passed all tests:
2 tests in doctest_example_without_import.add
2 tests in 2 items.
2 passed and 0 failed.
Test passed.
Pisanje testov v zunanjo besedilno datoteko
Testno kodo lahko zapišete tudi v zunanjo besedilno datoteko namesto v verigo dokumentov.
Kako napisati besedilno datoteko
Pišite v obliki Pythonovega interaktivnega načina, kot je opisano v dokumentaciji. Funkcije, ki se bodo uporabljale, je treba uvoziti.
Če želite postaviti besedilno datoteko v isti imenik kot datoteko .py, ki jo želite testirati, jo uvozite na naslednji način.
>>> from doctest_example import add
>>> add(1, 2)
3
>>> add(5, 10)
15
Klican iz datoteke py
Pokličite doctest.testfile() v drugo datoteko .py za testiranje.
Kot argument funkcije doctest.testfile() navedite pot do besedilne datoteke, v kateri je zapisana testna koda.
import doctest
doctest.testfile('doctest_text.txt')
Zaženite to py datoteko.
$ python3 doctest_example_testfile.py -v
Trying:
from doctest_example import add
Expecting nothing
ok
Trying:
add(1, 2)
Expecting:
3
ok
Trying:
add(5, 10)
Expecting:
15
ok
1 items passed all tests:
3 tests in doctest_text.txt
3 tests in 1 items.
3 passed and 0 failed.
Test passed.
Neposredno izvajanje besedilne datoteke
Tudi če nimate datoteke py, lahko besedilno datoteko preberete neposredno iz ukazne vrstice in zaženete teste.
Zaženite ukaz Python z možnostjo -m, da zaženete doctest kot skripto. Kot argument ukazne vrstice lahko navedete pot do besedilne datoteke.
$ python3 -m doctest -v doctest_text.txt
Trying:
from doctest_example import add
Expecting nothing
ok
Trying:
add(1, 2)
Expecting:
3
ok
Trying:
add(5, 10)
Expecting:
15
ok
1 items passed all tests:
3 tests in doctest_text.txt
3 tests in 1 items.
3 passed and 0 failed.
Test passed.