Доктест на Python:Пропустить весь квартал?

StackOverflow https://stackoverflow.com/questions/1809037

  •  05-07-2019
  •  | 
  •  

Вопрос

У меня есть модуль Python со строками документов в методах класса и реальный пример в модуле docstring.Различие заключается в том, что строки документации метода были тщательно обработаны, чтобы быть полностью повторяемыми тестами, в то время как реальный пример - это просто копия истории из оболочки Linux, которая случайно вызвала интерпретатор python.

Например.

"""
Real-world example:

# python2.5
Python 2.5 (release25-maint, Jul 20 2008, 20:47:25)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from packagename import module
>>> module.show_real_world_usage()
'Hello world!'
"""

class SomeClass(object):
    def someMethod(self):
        """
        >>> 1 == 1
        True
        """

Я хочу запустить doctest в SomeClass.someMethod, но не в docstrings модуля.

Доктесты +SKIP директива работает только для каждой строки, что означало бы добавление 10 строк к моему реальному примеру.Уродливый!

Есть ли способ заставить doctest пропустить целый блок?Немного похоже <!-- ... --> в HTML?

Это было полезно?

Решение 2

Мое решение состояло в том, чтобы обрезать 3-символьный >>> и ... лидеры, в которых я хочу, чтобы doctest пропускал их, делая их двухсимвольными.

Итак

"""
>>> from packagename import module
>>> module.show_real_world_usage()
'Hello world!'
"""

стал

"""
>> from packagename import module
>> module.show_real_world_usage()
'Hello world!'
"""

Epydoc отображает это не так хорошо, как doctests, но я могу с этим смириться.Однако директива "пропустить до дальнейшего уведомления" в doctest приветствовалась бы.

Другие советы

Оберните пример в функцию, а затем пропустите вызов функции:

"""
>>> def example():
...    from packagename import module
...    module.show_real_world_usage()
...
>>> example() # doctest: +SKIP
'Hello world!'
"""

Если это ни в коем случае не фактический doctest, вы можете просто присвоить значение переменной.Например,

example_usage = """
Real-world example:

# python2.5
...
"""

приведет к тому, что этот "тест" не будет оценен.

Возможно, было бы лучше использовать __example_usage__ (или что-то еще, окруженное двойным подчеркиванием), чтобы было ясно, что это "волшебная" переменная, а не переменная, которая будет использоваться в контексте скрипта.

Небольшой обходной путь, основанный на Ответ Робма сохраняет отображение / форматирование, начиная пример с >>> вот так:

""" 
>>>
>> from packagename import module 
>> module.show_real_world_usage() 
'Hello world!' 
"""
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top