我在 pytest 中遇到问题,未将我的项目 rootdir 包含在 sys.path 列表中。相反,它包含默认情况下测试所在的目录。
这是我的项目结构。
proj/
setup.py
mypackage/
__init__.py
a.py
tests/
test_a.py
运行 pytest 时
py.test proj/mypackage/tests
它插入项目/mypackage/测试进入 sys.path ,这不好,因为现在我无法导入 a 因为它与测试目录无关。
我注意到 py.test 检测到 rootdir,它被识别为我的项目的根目录,即 proj 目录。这就是我在测试期间在 sys.path 中想要的内容,因此我的所有代码都相对于该目录。如何确保 py.test 包含(...)/项目/在 sys.path 中,这样我就可以import mypackage.a
在 test_a.py 中。
我使用 conftest.py 将包路径(相对于 conftest.py 文件)附加到 sys.path,以便可以导入包。像这样的事情:
# contents of conftest.py
import sys
from os.path import abspath, dirname
package_path = abspath(dirname(dirname(__file__)))
sys.path.insert(0, package_path)
然后,您可以将此文件放入测试目录中。默认情况下,conftest.py 文件将在其他任何事情之前运行,因此其他测试将能够导入 mypackage。
另一种可能更好的方法是添加 setup.py 并遵循给出的建议here https://stackoverflow.com/questions/26804421/python-project-directory-structure-pytest-trouble.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)