9

ローカルで定義された関数をドキュメントテストする方法はありますか? 私が望む例として

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

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

  foo2()

テストに合格しないこと。それでも、モジュール全体で foo2 をグローバルにしたくありません...

4

2 に答える 2

4

ありがとう。私はすでに、docstring の外にあるコードを回避する方法がないのではないかと心配していました。それでも、関数のローカルをインポートして、ネストされた関数にアクセスするためのトリックがあるのではないかと思いました。とにかく、アレックスのアプローチを使用したソリューションは次のようになります

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())

ただし、インポートおよび組み込みの関数と変数はありません。

于 2010-03-12T10:37:37.237 に答える
1

空白の問題があります。たとえば、次のように修正すると、次のようになります。

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

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

  foo2()

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

テストは問題なくパスします。

于 2010-03-08T18:36:18.697 に答える