Python obsahuje štandardný modul doctest, ktorý testuje obsah reťazca doc, čo uľahčuje písanie vstupných a výstupných príkladov v reťazci doc a uľahčuje pochopenie dokumentácie.
Tu sú uvedené tieto informácie.
- Jednoduchý príklad testovania pomocou doctest
- Ak sa nevyskytne žiadna chyba
- Ak sa vyskytne chyba
- Ovládanie výstupných výsledkov pomocou možností a argumentov
-v
Možnosťverbose
argument (napr. funkcia, program, program)
- Spustenie modulu doctest z príkazového riadku
- Zápis testov do externého textového súboru
- Ako napísať textový súbor
- Volané zo súboru py
- Priame spustenie textového súboru
Jednoduchý príklad testovania pomocou doctest
Dokumentačný reťazec je reťazec uzavretý do jedného z nasledujúcich znakov: (1) názov testovanej funkcie, (2) názov testovanej funkcie a (3) očakávaná výstupná hodnota v interaktívnom režime jazyka Python.
"""
'''
Ak sa nevyskytne žiadna chyba
Uistite sa, že kód je v obsahu funkcie a reťazca dokumentov správny.
def add(a, b):
'''
>>> add(1, 2)
3
>>> add(5, 10)
15
'''
return a + b
if __name__ == '__main__':
import doctest
doctest.testmod()
Spustite tento súbor.
$ python3 doctest_example.py
Ak sa nevyskytnú žiadne chyby, nevypíše sa nič.
if __name__ == '__main__'
To znamená „vykonať následné spracovanie len vtedy, keď je príslušný súbor skriptu spustený z príkazového riadku.
Ak sa vyskytne chyba
Ak vytvoríte a vykonáte nasledujúci nesprávny kód, vypíše sa chyba.
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.
Zobrazuje sa takto.
Očakávané výstupné hodnoty zapísané v docteste. | Expected |
Skutočná výstupná hodnota | Got |
Ovládanie výstupných výsledkov pomocou možností a argumentov
-vMožnosť
Ak chcete, aby sa výstupné výsledky zobrazovali aj bez chýb, spustite príkaz s parametrom -v v príkazovom riadku.
$ 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 (napr. funkcia, program, program)
Ak chcete vždy zobraziť výstupné výsledky, zadajte argument verbose=True v doctest.testmod() v súbore py.
if __name__ == '__main__':
import doctest
doctest.testmod(verbose=True)
Výstupné výsledky sa počas behu vždy zobrazia bez 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.
Spustenie modulu doctest z príkazového riadku
if __name__ == '__main__'
Ak v ňom chcete urobiť niečo iné, môžete modul doctest spustiť priamo z príkazového riadku bez volania doctest.testmod() v súbore py.
Napríklad v týchto prípadoch
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)
Môže prijímať argumenty príkazového riadka a vykonávať proces ako zvyčajne.
$ python3 doctest_example_without_import.py 3 4
7
Ak spustíte doctest ako skript s voľbou -m, test sa spustí proti funkcii, v ktorej je doctest zapísaný. Ak chcete zobraziť výstupné výsledky, pridajte -v ako predtým.
$ 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.
Zápis testov do externého textového súboru
Testovací kód môžete namiesto do reťazca dokumentov zapísať aj do externého textového súboru.
Ako napísať textový súbor
Zápis vo formáte interaktívneho režimu Pythonu, ako je opísané v dokumentácii. Je potrebné importovať funkcie, ktoré sa majú použiť.
Ak chcete umiestniť textový súbor do rovnakého adresára ako testovaný súbor .py, stačí ho importovať takto.
>>> from doctest_example import add
>>> add(1, 2)
3
>>> add(5, 10)
15
Volané zo súboru py
Volanie doctest.testfile() v inom .py súbore na testovanie.
Ako argument príkazu doctest.testfile() zadajte cestu k textovému súboru, v ktorom je zapísaný testovací kód.
import doctest
doctest.testfile('doctest_text.txt')
Spustite tento súbor 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.
Priame spustenie textového súboru
Aj keď nemáte súbor py, môžete textový súbor načítať priamo z príkazového riadku a spustiť testy.
Spustite príkaz Python s príkazom -m, aby sa doctest spustil ako skript. Ako argument príkazového riadka môžete zadať cestu k textovému súboru.
$ 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.