doctest локально определенные функции - PullRequest
7 голосов
/ 08 марта 2010

есть ли способ проверить локально определенные функции? В качестве примера я хотел бы

def foo():
  """ >>> foo()
  testfoo"""

  def foo2():
    """ >>> 1/0 """ 
    print 'testfoo'

  foo2()

НЕ пройти тест. Но все же я не хотел бы делать foo2 глобальным для всего модуля ...

Ответы [ 2 ]

3 голосов
/ 12 марта 2010

Спасибо. Я уже боялся, что не будет никакого способа обойти код вне строки документации. Тем не менее я подумал, что может быть хитрость, чтобы импортировать локальные функции и таким образом получить доступ к вложенным функциям. В любом случае, решение, использующее подход Алекса, будет выглядеть так:

def foo(debug=False):
  """
     >>> foo()
     testfoo
     >>> foo(debug=True)
     """

  def foo2():
    """
       >>> 1/0"""
    print 'testfoo'


  if debug :
    import doctest
    for f in [foo2]: doctest.run_docstring_examples(f,locals())

  foo2()

Теперь единственный вопрос - как автоматизировать этот подход, чтобы у кого-то было что-то вроде

for f in locals().values(): doctest.run_docstring_examples(f,locals())

но без импортированных и встроенных функций и переменных.

1 голос
/ 08 марта 2010

У вас просто проблема с пробелами - если вы ее исправите, например, следующим образом:

def foo():
  """
    >>> foo()
    testfoo"""

  def foo2():
    """ >>> 1/0 """ 
    print 'testfoo'

  foo2()

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

тест проходит нормально.

...