对本地定义的函数进行doctest

10 投票
2 回答
1919 浏览
提问于 2025-04-15 20:10

有没有办法对本地定义的函数进行测试呢?举个例子,我希望

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

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

  foo2()

这个测试不通过。但是我又不想把 foo2 变成整个模块的全局函数……

2 个回答

1

你遇到的问题就是空格的问题——如果你把它修正,比如像下面这样:

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

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

  foo2()

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

那么测试就能顺利通过了。

4

谢谢你。我之前就担心在文档字符串外面没有办法使用代码。不过我还是想,或许有个技巧可以导入一个函数里的局部变量,从而访问到嵌套的函数。无论如何,使用Alex的方法的解决方案可以写成

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

的东西,但不包括那些导入的和内置的函数和变量。

撰写回答