gpt4 book ai didi

python - 将 pytest fixtures 保存在一个位置并跨子模块使用它们

转载 作者:太空宇宙 更新时间:2023-11-04 09:47:58 25 4
gpt4 key购买 nike

我正在构建一个 python 包,使用 pytest 进行所有单元测试。我的包由几个模块组成,每个模块下都有各种子模块。单元测试位于每个模块的 test 文件夹中(例如,./tumble/tumble/math/test/test_multiply.py./tumble/tumble/science/test/test_divide.py)

我有一些固定装置要在所有模块和子模块中共享。正因为如此,我想把它们放在一个中心位置,在这个例子中是 ./tumble/tumble/test,并且每个子模块 (math/test科学/测试)。

如果我将 conftest.py 放在每个子模块的 test 文件夹中,一切都会按预期进行。但是,我在两个位置有相同的固定装置,这并不理想。

当我将固定装置放在中央位置时,使用命令 pytest --fixtures 时我可以看到它们,但是,当我运行 pytest 时,它告诉我 fixture not found 并且该 fixture 未在 available fixtures 中列出。

我是否需要将我的所有单元测试移动到 test 文件夹下,或者我可以做些什么来将单元测试保留在子模块中,但将固定装置放在中央位置?

tumble
+-- setup.py
+-- README.md
+-- tumble
| +-- math
| | +-- __init__.py
| | +-- multiply.py
| | +-- test
| | +-- __init__.py
| | | +-- test
| | | | +-- __init__.py
| | | | +-- test_multiply.py
| +-- science
| | +-- __init__.py
| | +-- divide.py
| | +-- test
| | +-- __init__.py
| | | +-- test
| | | | +-- __init__.py
| | | | +-- test_divide.py
| +-- test
| | +-- __init__.py
| | +-- conftest.py

乘法.py

def multipy(x, y):
return x * y

conftest.py

import pytest

@pytest.fixture()
def numbers():
return (1, 5, 10)

test_multiply.py

import tumble
import pytest

assert tumble.multiply(numbers[0], numbers[1]) == 5

最佳答案

来自 pytest docabout plugins in pytest :

Local conftest.py plugins contain directory-specific hook implementations. Hook Session and test running activities will invoke all hooks defined in conftest.py files closer to the root of the filesystem

因此,为了让您的测试知道 fixture ,它应该在层次结构中更高。即,将您的共享装置放在根文件夹 /tumble/conftest.py

关于python - 将 pytest fixtures 保存在一个位置并跨子模块使用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49053928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com