Python standart doctest modulu ilə birlikdə sənəd sətirinin məzmununu yoxlayır, sənəd sətirində giriş və çıxış nümunələrini yazmağı asanlaşdırır və sənədlərin başa düşülməsini asanlaşdırır.
Aşağıdakı məlumatlar burada verilir.
- doctest ilə testin sadə nümunəsi
- Heç bir səhv yoxdursa
- Səhv varsa
- Seçimlər və arqumentlərlə çıxış nəticələrinə nəzarət edin
-v
Seçimverbose
arqument (məsələn, funksiya, proqram, proqram)
- Komanda xəttindən doctest modulunu işə salın
- Xarici mətn faylında testlərin yazılması
- Mətn faylını necə yazmaq olar
- py faylından çağırılıb
- Mətn faylını birbaşa icra edin
doctest ilə testin sadə nümunəsi
Sənəd sətri aşağıdakılardan birinə daxil edilmiş sətirdir: (1) sınaqdan keçiriləcək funksiyanın adı, (2) sınaqdan keçiriləcək funksiyanın adı və (3) Python interaktiv rejimində gözlənilən çıxış dəyəri.
"""
''
Heç bir səhv yoxdursa
Kodun funksiya və sənəd sətirinin məzmununda düzgün olduğundan əmin olun.
def add(a, b):
'''
>>> add(1, 2)
3
>>> add(5, 10)
15
'''
return a + b
if __name__ == '__main__':
import doctest
doctest.testmod()
Bu faylı işə salın.
$ python3 doctest_example.py
Heç bir səhv yoxdursa, heç bir şey çıxmayacaq.
if __name__ == '__main__'
Bu o deməkdir ki, “sonrakı emal yalnız müvafiq skript faylı əmr satırından icra edildikdə həyata keçirilir.
Səhv varsa
Aşağıdakı səhv kodu yaradıb icra etsəniz, xəta çıxacaq.
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şağıdakı kimi göstərilir.
Doctest-də yazılmış gözlənilən çıxış dəyərləri. | Expected |
Faktiki çıxış dəyəri | Got |
Seçimlər və arqumentlərlə çıxış nəticələrinə nəzarət edin
-vSeçim
Əgər heç bir səhv olmadıqda belə çıxış nəticələrinin göstərilməsini istəyirsinizsə, əmr satırında -v seçimi ilə əmri işlədin.
$ 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.
verbosearqument (məsələn, funksiya, proqram, proqram)
Əgər siz həmişə çıxış nəticələrini göstərmək istəyirsinizsə, py faylında doctest.testmod()-da verbose=True arqumentini göstərin.
if __name__ == '__main__':
import doctest
doctest.testmod(verbose=True)
Çıxış nəticələri həmişə iş vaxtında -v seçimi olmadan göstəriləcəkdir.
$ 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.
Komanda xəttindən doctest modulunu işə salın
if __name__ == '__main__'
Əgər siz orada başqa bir şey etmək istəyirsinizsə, doctest modulunu py faylında doctest.testmod() çağırmadan birbaşa komanda xəttindən işlədə bilərsiniz.
Məsələn, aşağıdakı hallarda
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)
O, komanda xətti arqumentlərini qəbul edə və prosesi həmişəki kimi icra edə bilər.
$ python3 doctest_example_without_import.py 3 4
7
Əgər doctest-i -m seçimi ilə skript kimi işlədirsinizsə, test doctestin yazıldığı funksiyaya qarşı işləyəcək. Çıxış nəticələrini göstərmək istəyirsinizsə, əvvəlki kimi -v əlavə edin.
$ 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.
Xarici mətn faylında testlərin yazılması
Siz həmçinin test kodunu docstring əvəzinə xarici mətn faylına yaza bilərsiniz.
Mətn faylını necə yazmaq olar
Docstring-də təsvir olunduğu kimi Python interaktiv rejim formatında yazın. İstifadə olunacaq funksiyaları idxal etmək lazımdır.
Əgər mətn faylını sınaqdan keçiriləcək .py faylı ilə eyni qovluğa yerləşdirmək istəyirsinizsə, onu aşağıdakı kimi idxal edin.
>>> from doctest_example import add
>>> add(1, 2)
3
>>> add(5, 10)
15
py faylından çağırılıb
Test üçün başqa .py faylında doctest.testfile() funksiyasına zəng edin.
Test kodunun doctest.testfile() arqumenti kimi yazıldığı mətn faylının yolunu göstərin.
import doctest
doctest.testfile('doctest_text.txt')
Bu py faylını işə salın.
$ 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.
Mətn faylını birbaşa icra edin
Py faylınız olmasa belə, mətn faylını birbaşa əmr satırından oxuya və testləri həyata keçirə bilərsiniz.
Doctesti skript kimi işlətmək üçün Python əmrini -m seçimi ilə işlədin. Siz mətn faylı yolunu əmr xətti arqumenti kimi təyin edə bilərsiniz.
$ 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.