Ako napísať a použiť doctest na písanie testovacieho kódu v reťazcoch dokumentov v jazyku Python.

obchodné

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
    • -vMožnosť
    • verboseargument (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á hodnotaGot

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.
Copied title and URL