Pythonissa on vakiona doctest-moduuli, joka testaa docstringin sisällön, mikä helpottaa tulo- ja lähtöesimerkkien kirjoittamista docstringiin ja tekee dokumentaatiosta helpommin ymmärrettävää.
Seuraavat tiedot annetaan tässä.
- Yksinkertainen esimerkki testauksesta doctestin avulla
- Jos virhettä ei ole
- Jos tapahtuu virhe
- Ohjaa tulostustuloksia vaihtoehtojen ja argumenttien avulla
-v
Vaihtoehtoverbose
argumentti (esim. funktio, ohjelma, ohjelma)
- Suorita doctest-moduuli komentoriviltä
- Testien kirjoittaminen ulkoiseen tekstitiedostoon
- Kuinka kirjoittaa tekstitiedosto
- Kutsutaan py-tiedostosta
- Suoraan tekstitiedoston suorittaminen
Yksinkertainen esimerkki testauksesta doctestin avulla
Docstring on merkkijono, joka on suljettu johonkin seuraavista: (1) testattavan funktion nimi, (2) testattavan funktion nimi ja (3) odotettu tulostusarvo vuorovaikutteisessa Python-tilassa.
"""
'''
Jos virhettä ei ole
Varmista, että koodi on oikein funktiossa ja docstringin sisällössä.
def add(a, b):
'''
>>> add(1, 2)
3
>>> add(5, 10)
15
'''
return a + b
if __name__ == '__main__':
import doctest
doctest.testmod()
Suorita tämä tiedosto.
$ python3 doctest_example.py
Jos virheitä ei ole, mitään ei tulosteta.
if __name__ == '__main__'
Tämä tarkoittaa, että ”suorita myöhempi käsittely vain, kun vastaava komentosarjatiedosto suoritetaan komentoriviltä.
Jos tapahtuu virhe
Jos luot ja suoritat seuraavan väärän koodin, tuloksena on virheilmoitus.
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.
Se esitetään seuraavasti.
Odotetut tulostusarvot kirjoitettu doctestiin. | Expected |
Todellinen lähtöarvo | Got |
Ohjaa tulostustuloksia vaihtoehtojen ja argumenttien avulla
-vVaihtoehto
Jos haluat, että tulostustulokset näytetään myös silloin, kun virheitä ei ole, suorita komento komentorivillä -v-optiolla.
$ 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.
verboseargumentti (esim. funktio, ohjelma, ohjelma)
Jos haluat aina näyttää tulostustulokset, määritä argumentti verbose=True py-tiedoston doctest.testmod() -kohdassa.
if __name__ == '__main__':
import doctest
doctest.testmod(verbose=True)
Tulostustulokset näytetään aina ilman -v-optiota ajon aikana.
$ 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.
Suorita doctest-moduuli komentoriviltä
if __name__ == '__main__'
Jos haluat tehdä siinä jotain muuta, voit ajaa doctest-moduulin suoraan komentoriviltä kutsumatta doctest.testmod() py-tiedostossa.
Esimerkiksi seuraavissa tapauksissa
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)
Se voi vastaanottaa komentoriviargumentteja ja suorittaa prosessin tavalliseen tapaan.
$ python3 doctest_example_without_import.py 3 4
7
Jos suoritat doctestin komentosarjana -m-optiolla, testi ajetaan funktiota vastaan, johon doctest on kirjoitettu. Jos haluat näyttää tulostulokset, lisää -v kuten aiemmin.
$ 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.
Testien kirjoittaminen ulkoiseen tekstitiedostoon
Voit myös kirjoittaa testikoodin ulkoiseen tekstitiedostoon docstringin sijasta.
Kuinka kirjoittaa tekstitiedosto
Kirjoita vuorovaikutteisessa Python-muodossa, kuten docstringissä on kuvattu. On tarpeen tuoda käytettävät funktiot.
Jos haluat laittaa tekstitiedoston samaan hakemistoon kuin testattavan .py-tiedoston, tuo se vain seuraavasti.
>>> from doctest_example import add
>>> add(1, 2)
3
>>> add(5, 10)
15
Kutsutaan py-tiedostosta
Kutsu doctest.testfile() toisessa .py-tiedostossa testausta varten.
Määritä sen tekstitiedoston polku, johon testikoodi kirjoitetaan, doctest.testfile()-olion argumenttina.
import doctest
doctest.testfile('doctest_text.txt')
Suorita tämä py-tiedosto.
$ 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.
Suoraan tekstitiedoston suorittaminen
Vaikka sinulla ei olisi py-tiedostoa, voit lukea tekstitiedoston suoraan komentoriviltä ja suorittaa testit.
Suorita Python-komento -m-optiolla suorittaaksesi doctestin skriptinä. Voit määrittää tekstitiedoston polun komentoriviargumenttina.
$ 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.