Python жүйесінде құжат жолдарындағы сынақ кодын жазу үшін doctest қалай жазылады және қолданылады.

Іскерлік

Python стандартты doctest модулімен бірге келеді, ол құжат жолының мазмұнын тексереді, бұл құжат жолында енгізу және шығару мысалдарын жазуды жеңілдетеді және құжаттаманы түсінуді жеңілдетеді.

Мұнда келесі ақпарат берілген.

  • doctest көмегімен тестілеудің қарапайым мысалы
    • Егер қате болмаса
    • Қате болса
  • Опциялар мен аргументтер арқылы шығыс нәтижелерін басқару
    • -vОпция
    • verboseаргумент (мысалы, функция, бағдарлама, бағдарлама)
  • Пәрмен жолынан doctest модулін іске қосыңыз
  • Сыртқы мәтіндік файлда сынақтарды жазу
    • Мәтіндік файлды қалай жазуға болады
    • py файлынан шақырылды
    • Мәтіндік файлды тікелей орындаңыз

doctest көмегімен тестілеудің қарапайым мысалы

Құжат жолы — келесілердің біріне қосылған жол: (1) тексерілетін функцияның аты, (2) тексерілетін функцияның атауы және (3) Python интерактивті режимінде күтілетін шығыс мәні.

  • """
  • ''

Егер қате болмаса

Функцияда және құжат жолының мазмұнында кодтың дұрыс екеніне көз жеткізіңіз.

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

    return a + b


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

Бұл файлды іске қосыңыз.

$ python3 doctest_example.py

Егер қателер болмаса, ештеңе шықпайды.

if __name__ == '__main__'Бұл пәрмен жолынан сәйкес сценарий файлы орындалғанда ғана келесі өңдеуді орындау дегенді білдіреді.

Қате болса

Келесі қате кодты жасап, орындасаңыз, қате шығады.

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.

Ол келесідей көрсетіледі.

doctest-те жазылған күтілетін шығыс мәндері.Expected
Нақты шығыс мәніGot

Опциялар мен аргументтер арқылы шығыс нәтижелерін басқару

-vОпция

Шығару нәтижелерінің қателер болмаған кезде де көрсетілуін қаласаңыз, пәрменді пәрмен жолындағы -v опциясымен іске қосыңыз.

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

verboseаргумент (мысалы, функция, бағдарлама, бағдарлама)

Шығару нәтижелерін әрқашан көрсетуді қаласаңыз, py файлындағы doctest.testmod() ішінде verbose=True аргументін көрсетіңіз.

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

Шығару нәтижелері әрқашан орындау уақытында -v опциясынсыз көрсетіледі.

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

Пәрмен жолынан doctest модулін іске қосыңыз

if __name__ == '__main__'Онда басқа бірдеңе жасағыңыз келсе, py файлында doctest.testmod() шақырмай-ақ, тікелей пәрмен жолынан doctest модулін іске қосуға болады.

Мысалы, келесі жағдайларда

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)

Ол пәрмен жолы аргументтерін қабылдап, процесті әдеттегідей орындай алады.

$ python3 doctest_example_without_import.py 3 4
7

Егер сіз doctest-ті -m опциясы бар сценарий ретінде іске қоссаңыз, сынақ doctest жазылған функцияға қарсы орындалады. Шығару нәтижелерін көрсеткіңіз келсе, бұрынғыдай -v қосыңыз.

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

Сыртқы мәтіндік файлда сынақтарды жазу

Сондай-ақ сынақ кодын құжат жолының орнына сыртқы мәтіндік файлға жаза аласыз.

Мәтіндік файлды қалай жазуға болады

Docstring ішінде сипатталғандай Python интерактивті режим пішімінде жазыңыз. Қолданылатын функцияларды импорттау қажет.

Мәтіндік файлды тексерілетін .py файлымен бірдей каталогқа қойғыңыз келсе, оны келесідей импорттаңыз.

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

py файлынан шақырылды

Тестілеу үшін басқа .py файлында doctest.testfile() деп атаңыз.

Сынақ коды doctest.testfile() аргументі ретінде жазылған мәтіндік файлдың жолын көрсетіңіз.

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

Осы py файлын іске қосыңыз.

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

Мәтіндік файлды тікелей орындаңыз

Сізде py файлы болмаса да, мәтіндік файлды тікелей пәрмен жолынан оқып, сынақтарды орындауға болады.

Doctest-ті сценарий ретінде іске қосу үшін Python пәрменін -m опциясымен іске қосыңыз. Мәтіндік файл жолын пәрмен жолы аргументі ретінде көрсетуге болады.

$ 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