Заявления, написанные >>>
в докстроках, - doctests.
Он позволяет протестировать ваш код, запустив примеры, встроенные в документацию, и подтвердив, что они дают ожидаемые результаты. Он анализирует текст справки, чтобы найти примеры, запускает их, а затем сравнивает выходной текст с ожидаемым значением.
В вашем случае PyCharm выполнил дополнительную задачу выделения кода python в docstrings. Это не повлияет на выполнение вашей обычной функции, поэтому вам не нужно беспокоиться об этом.
Пример:
Допустим, у меня есть сценарий, названный doctest_simple_addition
, в котором я написал несколько doctests для add()
функции, где некоторые тестовые примеры дает надлежащую производительность и некоторые вызывает исключение. Тогда я могу проверить, что моя функция дает ожидаемые результаты, запустив эти доктрины.
doctest_simple_addition.ру
def add(a,b):
"""
>>> add(1, 2)
3
>>> add(5, 3)
8
>>> add('a', 1)
Traceback (most recent call last):
...
TypeError: cannot concatenate 'str' and 'int' objects
"""
return a + b
Для запуска doctests используйте doctest
в качестве основной программы через -m
опции для интерпретатора. Как правило, во время тестирования не производится никакого вывода. Вы можете добавить опцию -v
, и doctest
затем распечатает подробный журнал того, что он пытается с помощью сводки в конце.
Doctest
ищет строки, начинающиеся с приглашения переводчика, >>>
, чтобы найти начало тестового примера. Экземпляр теста заканчивается пустой строкой или следующей подсказкой интерпретатора.
$ python -m doctest -v doctest_simple_addition.py
Trying:
add(1, 2)
Expecting:
3
ok
Trying:
add(5, 3)
Expecting:
8
ok
Trying:
add('a', 1)
Expecting:
Traceback (most recent call last):
...
TypeError: cannot concatenate 'str' and 'int' objects
ok
1 items had no tests:
doctest_simple_addition
1 items passed all tests:
3 tests in doctest_simple_addition.add
3 tests in 2 items.
3 passed and 0 failed.
Test passed.
Примечание: Когда doctest видит линию в traceback
заголовка (либо Traceback (most recent call last):
или Traceback (innermost last):
, в зависимости от версии Python вы работаете), он пропускает вперед, чтобы найти тип исключения и сообщения, не обращая внимания на промежуточные линии полностью.
Это делается потому, что пути в трассировке зависят от того, где модуль установлен в файловой системе на данной системе, и было бы невозможно написать переносные тесты, поскольку путь изменился бы от системы к системе.
Спасибо! Итак, 'doctest' запускает все внутренне после' >>> 'и сравнивает вывод с ожидаемым выходом, указанным в очереди на строке сразу ниже? Кроме того, в примере, который я предоставил, есть вызовы функций «Traceback ...» и «MissingParameter..'», которые фактически выполняются, или просто текст, напечатанный на экране в качестве сообщения, когда тест не удается? – avg
@avg Добро пожаловать! Да, точно, все, что следует за строкой '>>>', - это ожидаемый результат. «Traceback» и «MissingParameter» являются лишь частью вывода, в этом случае трассировка. В начале у вас есть заголовок трассировки, а в конце - тип исключения в последней строке. В случае исключений все между этими двумя строками игнорируется. – NZP
Я собирался принять ваш ответ, но @rahul написал тот, который является более полным, поэтому я собираюсь принять его. Спасибо, что нашли время ответить. – avg