Cara nulis lan nggunakake doctest kanggo nulis kode test ing docstrings ing Python.

Bisnis

Python dilengkapi modul doctest standar sing nguji isi docstring, nggawe gampang kanggo nulis conto input lan output ing docstring lan nggawe dokumentasi luwih gampang dingerteni.

Informasi ing ngisor iki kasedhiya ing kene.

  • Conto prasaja saka testing karo doctest
    • Yen ora ana kesalahan
    • Yen ana kesalahan
  • Ngontrol asil output kanthi pilihan lan argumen
    • -vPilihan
    • verboseargumen (misal fungsi, program, program)
  • Jalanake modul doctest saka baris printah
  • Tes nulis ing file teks eksternal
    • Cara nulis file teks
    • Disebut saka file py
    • Langsung nglakokake file teks

Conto prasaja saka testing karo doctest

Docstring minangka senar sing dilebokake ing salah siji saka ing ngisor iki: (1) jeneng fungsi sing bakal diuji, (2) jeneng fungsi sing bakal dites, lan (3) nilai output sing dikarepake ing mode interaktif Python.

  • """
  • ''

Yen ora ana kesalahan

Priksa manawa kode kasebut bener ing fungsi lan isi docstring.

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

    return a + b


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

Jalanake file iki.

$ python3 doctest_example.py

Yen ora ana kesalahan, ora bakal ana output.

if __name__ == '__main__'Iki tegese “nglakokake pangolahan sakteruse mung nalika file skrip sing cocog dieksekusi saka baris perintah.

Yen ana kesalahan

Yen sampeyan nggawe lan nglakokake kode sing salah ing ngisor iki, kesalahan bakal metu.

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.

Dituduhake kaya ing ngisor iki.

Nilai output sing dikarepake ditulis ing doctest.Expected
Nilai output nyataGot

Ngontrol asil output kanthi pilihan lan argumen

-vPilihan

Yen sampeyan pengin asil output ditampilake sanajan ora ana kesalahan, jalanake printah kanthi pilihan -v ing baris printah.

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

verboseargumen (misal fungsi, program, program)

Yen sampeyan pengin tansah nampilake asil output, nemtokake argumen verbose = True ing doctest.testmod () ing file py.

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

Asil output bakal tansah ditampilake tanpa pilihan -v nalika runtime.

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

Jalanake modul doctest saka baris printah

if __name__ == '__main__'Yen sampeyan pengin nindakake mergo ing, sampeyan bisa mbukak modul doctest langsung saka baris printah tanpa nelpon doctest.testmod () ing file py.

Contone, ing kasus ing ngisor iki

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)

Bisa nampa argumen baris perintah lan nglakokake proses kaya biasane.

$ python3 doctest_example_without_import.py 3 4
7

Yen sampeyan mbukak doctest minangka skrip kanthi pilihan -m, tes bakal ditindakake marang fungsi sing ditulis doctest. Yen sampeyan pengin nampilake asil output, tambahake -v kaya sadurunge.

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

Tes nulis ing file teks eksternal

Sampeyan uga bisa nulis kode test ing file teks eksternal tinimbang ing docstring.

Cara nulis file teks

Tulis ing format mode interaktif Python, kaya sing diterangake ing docstring. Sampeyan perlu ngimpor fungsi sing bakal digunakake.

Yen sampeyan pengin nyelehake file teks ing direktori sing padha karo file .py sing bakal dites, mung ngimpor kaya ing ngisor iki.

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

Disebut saka file py

Telpon doctest.testfile () ing file .py liyane kanggo testing.

Nemtokake path file teks ngendi kode test ditulis minangka bantahan saka doctest.testfile ().

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

Jalanake file py iki.

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

Langsung nglakokake file teks

Sanajan sampeyan ora duwe file py, sampeyan bisa maca file teks langsung saka baris printah lan mbukak tes.

Jalanake perintah Python kanthi pilihan -m kanggo mbukak doctest minangka skrip. Sampeyan bisa nemtokake path file teks minangka argumen baris perintah.

$ 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