Meriv çawa doctest dinivîse û bikar tîne da ku koda testê di docstrings-ê de li Python binivîse.

Dikan

Python bi modulek standard a doctestê ve tê ku naveroka docstringê diceribîne, nivîsandina nimûneyên ketin û derketinê di docstringê de hêsan dike û pelgeyê hêsantir fam dike.

Agahiyên jêrîn li vir têne pêşkêş kirin.

  • Nimûneyek hêsan a ceribandina bi doctest
    • Ger xeletiyek tune
    • Ger xeletiyek hebe
  • Encamên derketinê ji hêla vebijark û argumanan ve kontrol bikin
    • -vDibe
    • verbosearguman (mînak fonksiyon, bername, bername)
  • Modula doctest ji rêzika fermanê bimeşînin
  • Testên nivîsandinê di pelek nivîsê ya derveyî de
    • Meriv çawa pelek nivîsê dinivîse
    • Ji pelê py tê gotin
    • Rasterast pelek nivîsê bicîh bikin

Nimûneyek hêsan a ceribandina bi doctest

Docstring rêzikek e ku di yek ji van jêrîn de hatî vegirtin: (1) navê fonksiyona ku were ceribandin, (2) navê fonksiyona ku were ceribandin, û (3) nirxa encam a hêvîkirî di moda înteraktîf a Python de.

  • """
  • ''

Ger xeletiyek tune

Piştrast bikin ku kod di naverok û fonksiyonê de rast e.

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

    return a + b


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

Vê pelê bimeşîne.

$ python3 doctest_example.py

Ger xeletî nebe, dê tiştek dernekeve.

if __name__ == '__main__'Ev tê vê wateyê ku “pêvajoya paşîn tenê gava ku pelê skrîptê ya têkildar ji rêzika fermanê were darve kirin.

Ger xeletiyek hebe

Ger hûn koda çewt a jêrîn biafirînin û bicîh bikin, dê xeletiyek derkeve.

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.

Bi vî awayî tê nîşandan.

Nirxên derketinê yên hêvîkirî di doctestê de hatine nivîsandin.Expected
Nirxa hilberîna rastînGot

Encamên derketinê ji hêla vebijark û argumanan ve kontrol bikin

-vDibe

Heke hûn dixwazin ku encamên derketinê werin xuyang kirin jî dema ku xeletî tune bin, fermanê bi vebijarka -v li ser rêza fermanê bimeşînin.

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

verbosearguman (mînak fonksiyon, bername, bername)

Heke hûn dixwazin her tim encamên encam nîşan bidin, di pelê py de argumana verbose=Rast di doctest.testmod() de diyar bikin.

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

Encamên derketinê dê her dem di dema xebitandinê de bêyî vebijarka -v werin xuyang kirin.

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

Modula doctest ji rêzika fermanê bimeşînin

if __name__ == '__main__'Heke hûn dixwazin di wê de tiştek din bikin, hûn dikarin modula doctest rasterast ji rêzika fermanê bêyî gazîkirina doctest.testmod() di pelê py de bimeşînin.

Ji bo nimûne, di rewşên jêrîn de

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)

Ew dikare argumanên rêzika fermanê werbigire û pêvajoyê wekî gelemperî bimeşîne.

$ python3 doctest_example_without_import.py 3 4
7

Ger hûn doctest-ê wekî skrîptekê bi vebijarka -m-yê bimeşînin, dê ceribandin li hember fonksiyona ku tê de tê nivîsandin were xebitandin. Heke hûn dixwazin encamên derketinê nîşan bidin, -v wekî berê zêde bikin.

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

Testên nivîsandinê di pelek nivîsê ya derveyî de

Her weha hûn dikarin koda testê li şûna ku di docstring de di pelek nivîsê ya derveyî de binivîsin.

Meriv çawa pelek nivîsê dinivîse

Wekî ku di docstring de hatî diyar kirin, di forma moda înteraktîf a Python de binivîsin. Pêdivî ye ku fonksiyonên ku têne bikar anîn import bikin.

Heke hûn dixwazin pelê nivîsê têxin heman pelrêça pelê .py ya ku tê ceribandin, tenê wê wekî jêrîn derxînin.

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

Ji pelê py tê gotin

Ji bo ceribandinê bang li doctest.testfile() bikin.

Rêya pelê nivîsê ku koda testê wekî argumana doctest.testfile() tê nivîsandin diyar bike.

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

Vê pelê py bimeşîne.

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

Rasterast pelek nivîsê bicîh bikin

Tewra ku pelê py tune be jî, hûn dikarin pelê nivîsê rasterast ji rêzika fermanê bixwînin û ceribandinan bimeşînin.

Fermana Python bi vebijarka -m bimeşîne da ku doctest wekî skrîptê bimeşîne. Hûn dikarin riya pelê nivîsê wekî argumanek rêzika fermanê diyar bikin.

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