Kuidas kirjutada ja kasutada doctest’i, et kirjutada testkoodi doktriinides Pythonis.

Äri

Pythonil on standardne doctest-moodul, mis testib docstringi sisu, muutes sisend- ja väljundnäidete kirjutamise docstringi lihtsamaks ja dokumentatsiooni arusaadavamaks.

Siin on esitatud järgmine teave.

  • Lihtne näide testimisest doctestiga
    • Kui viga puudub
    • Kui esineb viga
  • Kontrollida väljundtulemusi valikute ja argumentide abil
    • -vValik
    • verboseargument (nt funktsioon, programm, programm)
  • Käivita doctest moodul käsurealt
  • Testide kirjutamine välisesse tekstifaili
    • Kuidas kirjutada tekstifaili
    • Kutsutakse py-failist
    • Tekstifaili otsene täitmine

Lihtne näide testimisest doctestiga

Docstring on string, mis on ümbritsetud ühega järgmistest: (1) testitava funktsiooni nimi, (2) testitava funktsiooni nimi ja (3) oodatav väljundväärtus Pythoni interaktiivses režiimis.

  • """
  • '''

Kui viga puudub

Veenduge, et kood on korrektne funktsiooni ja docstringi sisu osas.

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

    return a + b


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

Käivita see fail.

$ python3 doctest_example.py

Kui vigu ei ole, ei väljastata midagi.

if __name__ == '__main__'See tähendab, et “teostage järgnevat töötlemist ainult siis, kui käsurealt käivitatakse vastav skriptifail.

Kui esineb viga

Kui te loote ja täidate järgmise vale koodi, väljastatakse viga.

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.

See on näidatud järgmiselt.

Doctestis kirjutatud oodatavad väljundväärtused.Expected
Tegelik väljundväärtusGot

Kontrollida väljundtulemusi valikute ja argumentide abil

-vValik

Kui soovite, et väljundtulemused kuvatakse ka siis, kui vigu ei ole, käivitage käsk koos käsurea valikuga -v.

$ 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 (nt funktsioon, programm, programm)

Kui soovite väljundtulemusi alati kuvada, määrake failis doctest.testmod() py argument verbose=True.

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

Väljundtulemused kuvatakse alati ilma valiku -v kasutusaegselt.

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

Käivita doctest moodul käsurealt

if __name__ == '__main__'Kui soovite selles midagi muud teha, võite käivitada doctest-mooduli otse käsurealt, ilma et kutsuksite failis py faili doctest.testmod().

Näiteks järgmistel juhtudel

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)

See võib vastu võtta käsurea argumente ja käivitada protsessi tavapäraselt.

$ python3 doctest_example_without_import.py 3 4
7

Kui käivitate doctest'i skriptina koos valikuga -m, käivitatakse test selle funktsiooni vastu, millesse doctest on kirjutatud. Kui soovite väljundtulemusi kuvada, lisage -v nagu enne.

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

Testide kirjutamine välisesse tekstifaili

Te võite testkoodi kirjutada ka välisesse tekstifaili, mitte docstringi.

Kuidas kirjutada tekstifaili

Kirjutage Pythoni interaktiivse režiimi formaadis, nagu on kirjeldatud docstringis. On vaja importida kasutatavad funktsioonid.

Kui soovite panna tekstifaili samasse kataloogi kui testitav .py fail, importige see lihtsalt järgmiselt.

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

Kutsutakse py-failist

Kutsuge doctest.testfile() teises .py failis testimiseks.

Määrake doctest.testfile() argumendina tekstifaili tee, kuhu testkood kirjutatakse.

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

Käivita see py-fail.

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

Tekstifaili otsene täitmine

Isegi kui teil ei ole py-faili, saate lugeda tekstifaili otse käsurealt ja käivitada testid.

Käivitage Pythoni käsk koos -m valikuga, et käivitada doctest skriptina. Käsurea argumendina saate määrata tekstifaili tee.

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