pytest 的文件夹结构和导入问题

Yah*_*ran 5 python python-import pytest

想象一个简单的文件夹结构:

my_folder/
    __init__.py
    funcs.py
    tests/
        test_funcs.py
Run Code Online (Sandbox Code Playgroud)

函数.py:

def f():
    return 2
Run Code Online (Sandbox Code Playgroud)

__init__.py:

from funcs import f
Run Code Online (Sandbox Code Playgroud)

test_funcs.py:

from funcs import f

def test_f():
    assert f() == 2
Run Code Online (Sandbox Code Playgroud)

这是文档中建议的方法之一: https://pytest.readthedocs.io/en/reorganize-docs/new-docs/user/directory_struct.html

但是当我从以下位置运行 pytest 时my_folder

tests/test_funcs.py:1: in <module>
    from funcs import f
E   ModuleNotFoundError: No module named 'funcs'
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为我本以为pytest设置了它运行的路径,这样如果不手动处理就不会出现这些类型的错误。

文档也没有给出任何关于这一点的指示......他们只是说:

通常,您可以通过指向测试目录或模块来运行测试:

pytest tests/test_appmodule.py      # for external test dirs
pytest src/tests/test_appmodule.py  # for inlined test dirs
pytest src                          # run tests in all below test directories
pytest                              # run all tests below current dir
Run Code Online (Sandbox Code Playgroud)

我缺少什么?

Yah*_*ran 5

这是一个非常简单的方法:

  1. 清空__init__.py
  2. 从以上级别my_folder运行python -m pytestpython -m pytest tests(但不是pytest

说明:使用该选项运行模块-m会将其包含在 中PYTHONPATH,因此与 import 语句相关的所有内容都将顺利解决。