我想获得有关使用 pytest 设置简单应用程序的最佳方法的建议。
我可以在单个文件上正常运行 pytest,但我想使用以下方法引导 Python 应用程序:
mypkg/
__init__.py
app.py
tests/
__init__.py
test_app.py
但是当我运行 pytest
时出现错误:
NameError: name 'func' is not defined
mypkg/__init__.py 文件
# content of __init__.py
# Empty init file
mypkg/app.py 文件
# content of app.py
class mypkg:
def func(x):
return x + 1
tests/__init__.py 文件
# content of __init__.py
# Empty init file
tests/test_app.py 文件
# content of test_app.py
import pytest
import mypkg
def test_answer():
assert func(4) == 5
我使用的是 Python 3.5。
我需要一个setup.py
吗?如果我尝试调用mypkg.func(4)
,我会得到一个AttributeError: module
mypkg 没有属性“func”
。
非常感谢任何帮助。
最佳答案
这个问题与 pytest 或测试无关。 Python 中的一条基本规则是,如果你想访问一个名字,你需要导入它;您尚未导入 func
,因此会出现名称错误。
但是,由于某种原因,您已将 func
定义为类的一部分。您不能将方法与其类分开导入;但是,根本没有理由将其作为类中的方法。只需将其定义为独立函数,然后导入即可。
请注意,即使独立,func
也位于 app
内部,而不是直接位于 mypkg
内部。因此,您需要将其导入到实际所在的位置。
from mypkg.app import func
关于python - 使用 pytest 设置一个简单的 python 应用程序,出现错误 NameError 和 AttributeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42932773/