Како написати и користити доцтест за писање тестног кода у доцстрингс у Питхон-у.

Бусинесс

Питхон долази са стандардним доцтест модулом који тестира садржај низа докумената, што олакшава писање улазних и излазних примера у доцстринг и олакшава разумевање документације.

Овде се налазе следеће информације.

  • Једноставан пример тестирања са доцтестом
    • Ако нема грешке
    • Ако постоји грешка
  • Контролишите излазне резултате помоћу опција и аргумената
    • -vОпција
    • verboseаргумент (нпр. функција, програм, програм)
  • Покрените доцтест модул из командне линије
  • Писање тестова у екстерној текстуалној датотеци
    • Како написати текстуалну датотеку
    • Позван из пи датотеке
    • Директно извршите текстуалну датотеку

Једноставан пример тестирања са доцтестом

Докстринг је стринг затворен у нешто од следећег: (1) име функције која се тестира, (2) име функције која се тестира и (3) очекивана излазна вредност у Питхон интерактивном режиму.

  • """
  • ''

Ако нема грешке

Уверите се да је код исправан у садржају функције и низа докумената.

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.

То је приказано на следећи начин.

Очекиване излазне вредности записане у доцтест-у.Expected
Стварна излазна вредностGot

Контролишите излазне резултате помоћу опција и аргумената

-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аргумент (нпр. функција, програм, програм)

Ако желите да увек приказујете резултате излаза, наведите аргумент вербосе=Труе у доцтест.тестмод() у пи датотеци.

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

Резултати излаза ће увек бити приказани без опције -в у време извођења.

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

Покрените доцтест модул из командне линије

if __name__ == '__main__'Ако желите да урадите нешто друго у њему, можете покренути доцтест модул директно из командне линије без позивања доцтест.тестмод() у пи датотеци.

На пример, у следећим случајевима

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

Ако покренете доцтест као скрипту са опцијом -м, тест ће бити покренут против функције у којој је доцтест написан. Ако желите да прикажете резултате излаза, додајте -в као и раније.

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

Писање тестова у екстерној текстуалној датотеци

Такође можете написати тестни код у екстерну текстуалну датотеку уместо у доцстринг.

Како написати текстуалну датотеку

Пишите у Питхон формату интерактивног режима, као што је описано у документу. Неопходно је увести функције које ће се користити.

Ако желите да текстуалну датотеку ставите у исти директоријум као и .пи датотека за тестирање, само је увезите на следећи начин.

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

Позван из пи датотеке

Позовите доцтест.тестфиле() у другој .пи датотеци ради тестирања.

Наведите путању текстуалне датотеке у којој је тестни код написан као аргумент доцтест.тестфиле().

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

Покрените ову пи датотеку.

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

Директно извршите текстуалну датотеку

Чак и ако немате пи датотеку, можете прочитати текстуалну датотеку директно из командне линије и покренути тестове.

Покрените команду Питхон са опцијом -м да бисте покренули доцтест као скрипту. Можете навести путању текстуалне датотеке као аргумент командне линије.

$ 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