python - 为什么使用 tesfile 执行 doctest 找不到在同一文件上定义的函数?
问题描述
mypackage
我有一个包裹foo.py
# mypackage/foo.py
def foo():
"""
>>> 1
1
>>> bar()
'bar'
"""
pass
def bar():
return "bar"
如果我运行python -m doctest mypackage/foo.py
它就像一个魅力,但是。如果我用...创建一个测试文件
import doctest
doctest.testfile("foo.py", package="mypackage")
...在与 mypackage 相同的文件夹中,并运行此文件,它失败了
**********************************************************************
File "/Users/gecko/code/python/doctesttest/mypackage/foo.py", line 6, in foo.py
Failed example:
bar()
Exception raised:
Traceback (most recent call last):
File "/Users/gecko/.pyenv/versions/3.8.2/lib/python3.8/doctest.py", line 1329, in __run
exec(compile(example.source, filename, "single",
File "<doctest foo.py[1]>", line 1, in <module>
bar()
NameError: name 'bar' is not defined
**********************************************************************
1 items had failures:
1 of 2 in foo.py
***Test Failed*** 1 failures.
➜ doctesttest
我的问题是为什么,以及如何解决它?
解决方案
只需确保bar
在运行 doctest 时导入即可。例如,在我拥有的同一个目录example.txt
中foo.py
# example.txt
>>> from foo import bar
>>> 1
1
>>> bar()
'bar'
# foo.py
def bar():
return "bar"
现在 python 解释器将显示 0 个失败的测试行。
import doctest
doctest.testfile('example.txt')
>>> TestResults(failed=0, attempted=3)
但是,如果我省略该行>>> from foo import bar
,我将收到以下错误
>>> doctest.testfile('example.txt')
**********************************************************************
File "./example.txt", line 6, in example.txt
Failed example:
bar()
Exception raised:
Traceback (most recent call last):
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/doctest.py", line 1329, in __run
exec(compile(example.source, filename, "single",
File "<doctest example.txt[1]>", line 1, in <module>
bar()
NameError: name 'bar' is not defined
**********************************************************************
1 items had failures:
1 of 2 in example.txt
***Test Failed*** 1 failures.
TestResults(failed=1, attempted=2)
推荐阅读
- python - 如何运行 Python 文件作为 C 文件的参数?
- flutter - Flutter Admob VideoReward 不适用于现实生活中的应用程序
- javascript - javascript减少功能
- python - 如何修复“IndexError:列表索引超出范围”错误
- acumatica - 从 2018R1 升级到 2018R2 时收到编译错误
- firebase - 使用 unity3d 和 firebase 进行身份验证时出错
- assembly - 创建进程时出错 C:\Masm32\bin\ML.EXE /c /Cp /nologo /I"C:\Masm32\Include" "Hello.asm"
- python - 如何编辑我的代码以使输出是下一个大于 3 的数字?
- r - r:通过 dplyr 的 group_by 函数传递列列表
- python - ValueError:基于位置的索引只能有[标签(必须在索引中)