python - 使用 pytest 设置一个简单的 python 应用程序,出现错误 NameError 和 AttributeError

标签 python python-3.x pytest

我想获得有关使用 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: modulemypkg 没有属性“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/

相关文章:

python - 根据 JSON 文件中的特定参数制作元素列表

python - 使用 jinja 标签在 html 标签内使用 if 条件

python - unittest vs pytest vs nose

python - 计算多个子字符串出现在数据框列中的次数

python - 使用什么过滤器可以消除角点对结果的影响

传递给构造函数的 Python 函数引用变成 c_void_p 数据类型

python - 如何在测试之间共享测试运行数据?

python - dynamodb boto put_item 类型为 Map "M"

python - 未知符号 matplotlib mathtext

python-3.x - 如何将命令行参数从pytest传递给代码