我在使用 pytest 时遇到问题,在 sys.path 列表中不包括我的项目 rootdir。相反,它包括默认情况下测试所在的目录。
这是我的项目结构。
proj/
setup.py
mypackage/
__init__.py
a.py
tests/
test_a.py
Run Code Online (Sandbox Code Playgroud)
运行 pytest 时
py.test proj/mypackage/tests
Run Code Online (Sandbox Code Playgroud)
它将proj/mypackage/tests插入到 sys.path 中,这并不好,因为现在我无法导入 a,因为它与测试目录无关。
我注意到 py.test 检测到一个 rootdir,它被识别为我的项目的根目录,即 proj 目录。这是我在测试期间在 sys.path 中想要的,所以我的所有代码都是相对于该目录的。我如何确保 py.test在 sys.path 中包含(...)/proj/以便我可以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)
Run Code Online (Sandbox Code Playgroud)
然后,您可以将此文件放在测试目录中。默认情况下,conftest.py 文件将在其他任何事情之前运行,因此其他测试将能够导入 mypackage。
另一种可能更好的方法是添加一个 setup.py 并遵循此处给出的建议。
| 归档时间: |
|
| 查看次数: |
1335 次 |
| 最近记录: |