Si të shkruani dhe përdorni doctest për të shkruar kodin e testimit në vargjet e dokumenteve në Python.

biznes

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
    • -vOpsioni
    • verboseargument (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 daljesGot

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