Pythonil on standardne doctest-moodul, mis testib docstringi sisu, muutes sisend- ja väljundnäidete kirjutamise docstringi lihtsamaks ja dokumentatsiooni arusaadavamaks.
Siin on esitatud järgmine teave.
- Lihtne näide testimisest doctestiga
- Kui viga puudub
- Kui esineb viga
- Kontrollida väljundtulemusi valikute ja argumentide abil
-v
Valikverbose
argument (nt funktsioon, programm, programm)
- Käivita doctest moodul käsurealt
- Testide kirjutamine välisesse tekstifaili
- Kuidas kirjutada tekstifaili
- Kutsutakse py-failist
- Tekstifaili otsene täitmine
Lihtne näide testimisest doctestiga
Docstring on string, mis on ümbritsetud ühega järgmistest: (1) testitava funktsiooni nimi, (2) testitava funktsiooni nimi ja (3) oodatav väljundväärtus Pythoni interaktiivses režiimis.
"""
'''
Kui viga puudub
Veenduge, et kood on korrektne funktsiooni ja docstringi sisu osas.
def add(a, b):
'''
>>> add(1, 2)
3
>>> add(5, 10)
15
'''
return a + b
if __name__ == '__main__':
import doctest
doctest.testmod()
Käivita see fail.
$ python3 doctest_example.py
Kui vigu ei ole, ei väljastata midagi.
if __name__ == '__main__'
See tähendab, et “teostage järgnevat töötlemist ainult siis, kui käsurealt käivitatakse vastav skriptifail.
Kui esineb viga
Kui te loote ja täidate järgmise vale koodi, väljastatakse viga.
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.
See on näidatud järgmiselt.
Doctestis kirjutatud oodatavad väljundväärtused. | Expected |
Tegelik väljundväärtus | Got |
Kontrollida väljundtulemusi valikute ja argumentide abil
-vValik
Kui soovite, et väljundtulemused kuvatakse ka siis, kui vigu ei ole, käivitage käsk koos käsurea valikuga -v.
$ 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 (nt funktsioon, programm, programm)
Kui soovite väljundtulemusi alati kuvada, määrake failis doctest.testmod() py argument verbose=True.
if __name__ == '__main__':
import doctest
doctest.testmod(verbose=True)
Väljundtulemused kuvatakse alati ilma valiku -v kasutusaegselt.
$ 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.
Käivita doctest moodul käsurealt
if __name__ == '__main__'
Kui soovite selles midagi muud teha, võite käivitada doctest-mooduli otse käsurealt, ilma et kutsuksite failis py faili doctest.testmod().
Näiteks järgmistel juhtudel
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)
See võib vastu võtta käsurea argumente ja käivitada protsessi tavapäraselt.
$ python3 doctest_example_without_import.py 3 4
7
Kui käivitate doctest'i skriptina koos valikuga -m, käivitatakse test selle funktsiooni vastu, millesse doctest on kirjutatud. Kui soovite väljundtulemusi kuvada, lisage -v nagu enne.
$ 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.
Testide kirjutamine välisesse tekstifaili
Te võite testkoodi kirjutada ka välisesse tekstifaili, mitte docstringi.
Kuidas kirjutada tekstifaili
Kirjutage Pythoni interaktiivse režiimi formaadis, nagu on kirjeldatud docstringis. On vaja importida kasutatavad funktsioonid.
Kui soovite panna tekstifaili samasse kataloogi kui testitav .py fail, importige see lihtsalt järgmiselt.
>>> from doctest_example import add
>>> add(1, 2)
3
>>> add(5, 10)
15
Kutsutakse py-failist
Kutsuge doctest.testfile() teises .py failis testimiseks.
Määrake doctest.testfile() argumendina tekstifaili tee, kuhu testkood kirjutatakse.
import doctest
doctest.testfile('doctest_text.txt')
Käivita see py-fail.
$ 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.
Tekstifaili otsene täitmine
Isegi kui teil ei ole py-faili, saate lugeda tekstifaili otse käsurealt ja käivitada testid.
Käivitage Pythoni käsk koos -m valikuga, et käivitada doctest skriptina. Käsurea argumendina saate määrata tekstifaili tee.
$ 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.