首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >pytest的文件夹结构和导入问题

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

Stack Overflow用户
提问于 2018-10-11 03:50:05
回答 2查看 3.1K关注 0票数 3

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

代码语言:javascript
复制
my_folder/
    __init__.py
    funcs.py
    tests/
        test_funcs.py

funcs.py:

代码语言:javascript
复制
def f():
    return 2

__init__.py:

代码语言:javascript
复制
from funcs import f

test_funcs.py:

代码语言:javascript
复制
from funcs import f

def test_f():
    assert f() == 2

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

但是当我从my_folder运行pytest时

代码语言:javascript
复制
tests/test_funcs.py:1: in <module>
    from funcs import f
E   ModuleNotFoundError: No module named 'funcs'

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

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

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

pytest test / test _appmodule.py#对于外部测试目录pytest src / test /test_appmodule.py#对于内联测试目录pytest src#在以下所有测试目录中运行测试pytest #运行当前目录下的所有测试

我遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-12 07:08:25

下面是一个非常简单的方法:

  1. Empty out高于my_folder run python -m pytestpython -m pytest tests的级别(但不是pytest)

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

票数 3
EN

Stack Overflow用户

发布于 2018-10-11 04:37:19

为了成功导入,必须从模块funcs所在的目录运行测试文件test_funcs.py

作为一种解决办法,您可以修改sys.path,它确定模块的插入器搜索路径。

test_funcs.py

代码语言:javascript
复制
import sys
sys.path.append('/Users/Yahya/Desktop/my_folder')

from funcs import f

def test_f():
    assert f() == 2
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52747763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档