Docstrings Python, который следует за объявлением класса или функции, помещается в атрибут __doc__
.Извлечение «дополнительных» docstrings из кода Python?
Вопрос: Как извлечь дополнительные «внутренние» docstrings, которые происходят позже в функции?
Обновление: такие буквенные утверждения выдаются компилятором. Могу ли я добраться до них (и их номер строки) через АСТ?
Почему я спрашиваю?
У меня было (не полностью запеченная) идея использовать такую «внутреннюю» строку документацию очертить Учитывая/Когда/Then разделы Проворной Сценарий:
def test_adding():
"""Scenario: Adding two numbers"""
adder = Adder()
"""When I add 2 and 3"""
result = adder.add(2, 3)
"""Then the result is 5"""
assert result == 5
пути экстрагирования, в строках документации Test- работает структура может генерировать такой вывод:
Scenario: Adding two numbers
When I add 2 and 3 (PASS)
Then the result is 5 (FAIL)
AssertionError Traceback
...
Я думаю, что это будет более кратким, чем подходом, принятым в Behave, Freshen, Lettuce, PyCukes, которые требуют определения SEPAR для каждого шага. Мне не нравится повторять текст шага как имя функции (@When("I add numbers") def add_numbers()
). Но в отличие от простого модульного теста, docstrings добавят возможность распечатать бизнес-удобочитаемый сценарий для справки.
вы можете использовать 'inspect.getsource (module)' для получения источника. вам не нужно '_ast', имена доступны через' ast'. – jfs
Спасибо, обновлено! – zeekay
Я не уверен, что вы должны идти по маршруту ast, поскольку он по сути представляет новый синтаксис для ваших тестов. Что делать, если кто-то забывает поставить строку? и т. д. Возможно, вы можете указать контексты, используя оператор 'with', и использовать их для создания общего теста. –