Hvernig á að skrifa og nota doctest til að skrifa prófkóða í docstrings í Python.

Viðskipti

Python kemur með venjulegri doctest einingu sem prófar innihald docstring, sem gerir það auðvelt að skrifa inntaks- og úttaksdæmi í docstring og gerir skjölin auðveldari að skilja.

Eftirfarandi upplýsingar eru veittar hér.

  • Einfalt dæmi um próf með doctest
    • Ef það er engin villa
    • Ef það er villa
  • Stjórna úttaksniðurstöðum með valkostum og rökum
    • -vValmöguleiki
    • verboserök (t.d. fall, forrit, forrit)
  • Keyrðu doctest eininguna frá skipanalínunni
  • Að skrifa próf í ytri textaskrá
    • Hvernig á að skrifa textaskrá
    • Hringt úr py skrá
    • Framkvæma textaskrá beint

Einfalt dæmi um próf með doctest

Skjalstrengur er strengur sem er innifalinn í einu af eftirfarandi: (1) heiti fallsins sem á að prófa, (2) heiti fallsins sem á að prófa og (3) væntanlegt úttaksgildi í Python gagnvirkum ham.

  • """
  • ''

Ef það er engin villa

Gakktu úr skugga um að kóðinn sé réttur í aðgerðinni og innihaldi skráarstrengsins.

def add(a, b):
    '''
    >>> add(1, 2)
    3
    >>> add(5, 10)
    15
    '''

    return a + b


if __name__ == '__main__':
    import doctest
    doctest.testmod()

Keyra þessa skrá.

$ python3 doctest_example.py

Ef það eru engar villur verður ekkert gefið út.

if __name__ == '__main__'Þetta þýðir „framkvæmdu aðeins síðari vinnslu þegar samsvarandi skriftuskrá er keyrð frá skipanalínunni.

Ef það er villa

Ef þú býrð til og framkvæmir eftirfarandi rangan kóða mun villa birtast.

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.

Það er sýnt sem hér segir.

Væntanleg úttaksgildi skrifuð í doctest.Expected
Raunverulegt úttaksgildiGot

Stjórna úttaksniðurstöðum með valkostum og rökum

-vValmöguleiki

Ef þú vilt að úttaksniðurstöður birtist jafnvel þegar engar villur eru, keyrðu skipunina með -v valkostinum á skipanalínunni.

$ 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.

verboserök (t.d. fall, forrit, forrit)

Ef þú vilt alltaf birta úttaksniðurstöðurnar skaltu tilgreina rökin verbose=True í doctest.testmod() í py skránni.

if __name__ == '__main__':
    import doctest
    doctest.testmod(verbose=True)

Úttaksniðurstöðurnar munu alltaf birtast án valmöguleikans -v á keyrslutíma.

$ 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.

Keyrðu doctest eininguna frá skipanalínunni

if __name__ == '__main__'Ef þú vilt gera eitthvað annað í því geturðu keyrt doctest eininguna beint frá skipanalínunni án þess að kalla doctest.testmod() í py skránni.

Til dæmis í eftirfarandi tilvikum

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)

Það getur tekið á móti skipanalínurökum og framkvæmt ferlið eins og venjulega.

$ python3 doctest_example_without_import.py 3 4
7

Ef þú keyrir doctest sem skriftu með valmöguleikanum -m, verður prófið keyrt á móti fallinu sem doctest er skrifað í. Ef þú vilt birta úttaksniðurstöðurnar skaltu bæta við -v eins og áður.

$ 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.

Að skrifa próf í ytri textaskrá

Þú getur líka skrifað prófunarkóðann í utanaðkomandi textaskrá í staðin fyrir í docstring.

Hvernig á að skrifa textaskrá

Skrifaðu í Python gagnvirku formi eins og lýst er í docstring. Nauðsynlegt er að flytja inn aðgerðirnar sem á að nota.

Ef þú vilt setja textaskrána í sömu möppu og .py skrána sem á að prófa skaltu bara flytja hana inn á eftirfarandi hátt.

>>> from doctest_example import add
>>> add(1, 2)
3
>>> add(5, 10)
15

Hringt úr py skrá

Hringdu í doctest.testfile() í annarri .py skrá til að prófa.

Tilgreindu slóð textaskrárinnar þar sem prófkóðinn er skrifaður sem rök fyrir doctest.testfile().

import doctest
doctest.testfile('doctest_text.txt')

Keyrðu þessa py skrá.

$ 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.

Framkvæma textaskrá beint

Jafnvel ef þú ert ekki með py skrána geturðu lesið textaskrána beint af skipanalínunni og keyrt prófin.

Keyrðu Python skipunina með -m valkostinum til að keyra doctest sem skriftu. Þú getur tilgreint slóð textaskráar sem skipanalínurök.

$ 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