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
-v
Dibeverbose
arguman (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în | Got |
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.