Поместить python doctest в конец файла кода? - PullRequest
2 голосов
/ 19 марта 2012

Я могу поместить тесты Python в тела каждой функции, что мне иногда нравится для небольших библиотек, потому что они находятся в том же файле, что и функция.

Или я могу собрать их все вместе в отдельную библиотеку.запустите файл и выполните отдельный файл, что хорошо, если я не хочу, чтобы doctest находился между функциями.Иногда я нахожу, что с кодом легче работать, если строки документов маленькие.

Есть ли способ сохранить тесты Python в одном файле, но собрать их все вместе в конце файла?


РЕДАКТИРОВАТЬ: решение, основанное на принятом ответе ниже:

def hello_world():
  return u'Hello World'


def hello(name):
  return u'Hello %s' % name


def doctest_container():
  """
  >>> hello_world()
  u'Hello World'

  >>> hello(u'Guido')
  u'Hello Guido'
  """
  pass


if __name__ == "__main__":
    import doctest
    doctest.testmod()

На самом деле это просто, фиктивная функция создается как последняя функция, которая содержит все тесты водна строка документов.

Ответы [ 2 ]

2 голосов
/ 19 марта 2012

Вы можете добавить документы в конец строки документа следующим образом:

def myfunc():
    """This is a docstring without a doctest
    """
    pass

# ... some other code here

# Add docstrings for doctest:
myfunc.__doc__ += """
>>> myfunc()
>>> repr(myfunc())
None
"""
1 голос
/ 19 марта 2012

doctest - для проверки того, что примеры в вашей документации синхронизированы с реализацией.

если тестов много; модульные тесты, написанные в виде кода, проще поддерживать, чем тесты на основе doctest.

Вы можете добавить тестовую функцию в конце модуля с желаемыми тестами документов, чтобы избежать загрязнения строк документации не тестового кода:

def test():
    """
    ..
    """
    import doctest
    doctest.testmod()

if __name__=="__main__": 
    test()  # if the module is called as a script then run tests
...