对本地定义的函数进行doctest
有没有办法对本地定义的函数进行测试呢?举个例子,我希望
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())
的东西,但不包括那些导入的和内置的函数和变量。