Python-da docstrings-də test kodu yazmaq üçün doctest necə yazılır və istifadə olunur.

Biznes

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
    • -vSeçim
    • verbosearqument (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əriGot

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.
Copied title and URL