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аргумент (напр. функция, програма, програма)
Ако искате винаги да показвате изходните резултати, посочете аргумента verbose=True в doctest.testmod() в py файла.
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__'
Ако искате да направите нещо друго в него, можете да стартирате модула doctest директно от командния ред, без да извиквате doctest.testmod() във файла py.
Например в следните случаи
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.
Записване на тестове във външен текстов файл
Можете също така да запишете тестовия код във външен текстов файл, вместо в докстринга.
Как се пише текстов файл
Записвайте във формат за интерактивен режим на Python, както е описано в документацията. Необходимо е да се импортират функциите, които ще се използват.
Ако искате да поставите текстовия файл в същата директория като файла .py, който ще бъде тестван, просто го импортирайте по следния начин.
>>> from doctest_example import add
>>> add(1, 2)
3
>>> add(5, 10)
15
Извикан от py файл
Извикайте doctest.testfile() в друг .py файл за тестване.
Посочете пътя до текстовия файл, в който е записан тестовият код, като аргумент на 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, можете да прочетете текстовия файл директно от командния ред и да стартирате тестовете.
Изпълнете командата Python с опцията -m, за да стартирате doctest като скрипт. Можете да посочите пътя до текстовия файл като аргумент от командния ред.
$ 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.