Python在主线中使用doctest

0 投票
1 回答
711 浏览
提问于 2025-04-16 02:46

你好,我在想是否可以从主程序中进行文档测试,或者类似的操作,而不是像文档测试说明中那样只测试一个函数。

"""
>>> 
Hello World
"""

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

这其实是为了能把学生的脚本和文档字符串进行测试。我找到了一段代码,可以让我同时输入两个字符串。

import doctest
from doctest import DocTestRunner, DocTestParser
enter code here
def run_doctest(code, test):
    import doctest
    from doctest import DocTestRunner, DocTestParser
    code = code + '\n__dtest=__parser.get_doctest(__test, globals(), "Crunchy Doctest", "crunchy", 0)\n__runner.run(__dtest)\n'
    runner = DocTestRunner()
    parser = DocTestParser()
    exec code in {'__runner':runner, '__parser':parser, '__test':test}

这段代码大致可以实现这个功能,但看起来并不是很理想。有没有什么建议呢?

1 个回答

2

doctest 并不仅仅是用来测试函数的。比如,如果 dt.py 是:

'''
  >>> foo
  23
'''

foo = 23

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

那么,例如:

$ py26 dt.py -v
Trying:
    foo
Expecting:
    23
ok
1 items passed all tests:
   1 tests in __main__
1 tests in 1 items.
1 passed and 0 failed.
Test passed.

(不加 -v 也能正常工作,不过那样的话就没什么输出了:只是安静而已;-)。这就是你想要的吗?

撰写回答