Python vjen me një modul standard doctest që teston përmbajtjen e një vargu docstring, duke e bërë të lehtë shkrimin e shembujve të hyrjes dhe daljes në docstring dhe duke e bërë dokumentacionin më të lehtë për t’u kuptuar.
Informacioni i mëposhtëm jepet këtu.
- Një shembull i thjeshtë i testimit me doctest
- Nëse nuk ka gabim
- Nëse ka një gabim
- Kontrolloni rezultatet e daljes sipas opsioneve dhe argumenteve
-v
Opsioniverbose
argument (p.sh. funksion, program, program)
- Drejtoni modulin doctest nga linja e komandës
- Shkrimi i testeve në një skedar teksti të jashtëm
- Si të shkruani një skedar teksti
- Thirrja nga skedari py
- Ekzekutoni drejtpërdrejt një skedar teksti
Një shembull i thjeshtë i testimit me doctest
Një varg docstring është një varg i mbyllur në një nga sa vijon: (1) emri i funksionit që do të testohet, (2) emri i funksionit që do të testohet dhe (3) vlera e pritur e daljes në modalitetin interaktiv Python.
"""
''
Nëse nuk ka gabim
Sigurohuni që kodi të jetë i saktë në përmbajtjen e funksionit dhe të vargut të dokumentit.
def add(a, b):
'''
>>> add(1, 2)
3
>>> add(5, 10)
15
'''
return a + b
if __name__ == '__main__':
import doctest
doctest.testmod()
Ekzekutoni këtë skedar.
$ python3 doctest_example.py
Nëse nuk ka gabime, asgjë nuk do të dalë.
if __name__ == '__main__'
Kjo do të thotë “ekzekutoni përpunimin pasues vetëm kur skedari përkatës i skriptit ekzekutohet nga linja e komandës.
Nëse ka një gabim
Nëse krijoni dhe ekzekutoni kodin e mëposhtëm të gabuar, do të dalë një gabim.
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.
Është treguar si më poshtë.
Vlerat e pritshme të daljes të shkruara në doctest. | Expected |
Vlera aktuale e daljes | Got |
Kontrolloni rezultatet e daljes sipas opsioneve dhe argumenteve
-vOpsioni
Nëse dëshironi që rezultatet e daljes të shfaqen edhe kur nuk ka gabime, ekzekutoni komandën me opsionin -v në vijën e komandës.
$ 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 (p.sh. funksion, program, program)
Nëse dëshironi të shfaqni gjithmonë rezultatet e daljes, specifikoni argumentin verbose=True në doctest.testmod() në skedarin py.
if __name__ == '__main__':
import doctest
doctest.testmod(verbose=True)
Rezultatet e daljes do të shfaqen gjithmonë pa opsionin -v në kohën e ekzekutimit.
$ 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.
Drejtoni modulin doctest nga linja e komandës
if __name__ == '__main__'
Nëse dëshironi të bëni diçka tjetër në të, mund ta ekzekutoni modulin doctest direkt nga linja e komandës pa thirrur doctest.testmod() në skedarin py.
Për shembull, në rastet e mëposhtme
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)
Mund të marrë argumente të linjës së komandës dhe të ekzekutojë procesin si zakonisht.
$ python3 doctest_example_without_import.py 3 4
7
Nëse ekzekutoni doctest si skript me opsionin -m, testi do të ekzekutohet kundër funksionit në të cilin është shkruar doctest. Nëse dëshironi të shfaqni rezultatet e daljes, shtoni -v si më parë.
$ 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.
Shkrimi i testeve në një skedar teksti të jashtëm
Ju gjithashtu mund të shkruani kodin e testimit në një skedar teksti të jashtëm në vend të vargut të dokumentit.
Si të shkruani një skedar teksti
Shkruani në formatin e modalitetit interaktiv Python, siç përshkruhet në docstring. Është e nevojshme të importohen funksionet që do të përdoren.
Nëse dëshironi ta vendosni skedarin e tekstit në të njëjtën direktori me skedarin .py që do të testohet, thjesht importojeni si më poshtë.
>>> from doctest_example import add
>>> add(1, 2)
3
>>> add(5, 10)
15
Thirrja nga skedari py
Thirrni doctest.testfile() në një skedar tjetër .py për testim.
Specifikoni shtegun e skedarit të tekstit ku kodi i testit është shkruar si argumenti i doctest.testfile().
import doctest
doctest.testfile('doctest_text.txt')
Ekzekutoni këtë skedar py.
$ 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.
Ekzekutoni drejtpërdrejt një skedar teksti
Edhe nëse nuk e keni skedarin py, mund ta lexoni skedarin e tekstit direkt nga linja e komandës dhe të ekzekutoni testet.
Ekzekutoni komandën Python me opsionin -m për të ekzekutuar doctest si skript. Ju mund të specifikoni shtegun e skedarit të tekstit si argument i linjës së komandës.
$ 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.