从测试子目录中,导入继承自基本抽象的模块 class
From a test sub-directory, import module that inherits from a base abstract class
上下文
我正在尝试 运行 使用 pytest 进行单元测试,但是,测试文件无法找到模块,因为它们继承自抽象 class。
更具体地说,我有以下目录结构:
project
|- __init__.py
|- project.py
|- JsonParser.py
|- Parser.py
|- tests
|__init__.py
|-test_JsonParser.py
JsonParser 具有以下导入:
from Parser import Parser
test_JsonParser.py 具有以下导入:
from project.JsonParser import JsonParser
目标是从 'project' 父目录中的 JsonParser 导入 JsonParser class。当我尝试这个时,pytest 提出以下投诉:
ModuleNotFoundError: No module named 'Parser'
相关修复尝试
因为下面的话题,我选择了相应的目录结构。当没有抽象基础的继承 class 时,它工作得很好。我怀疑问题在于 JsonParser 如何导入解析器。有一个嵌套的导入,pytest 无法协调这一点,即使 运行ning 来自父目录
What is the best project structure for a Python application?
下面的帖子是我最接近答案的帖子,但它变成了先有鸡还是先有蛋的问题。如果我做成相对路径,我就无法执行'project.py',因为它无法定位到Parser.
的相对路径
Python, import package module when class inherit abstract class
编辑:我应该提到我 运行 我的测试如下:
pytest tests/test_JsonParser.py
看来诀窍是按以下方式执行:
Python -m pytest project/tests
这样做会将根目录添加到搜索路径中。 运行 只有 pytest 不在 Python 文件搜索路径中包含根目录。例如,当使用'pytest '执行测试时,Parser将无法导入到JsonParser中,因为解释器只会在Parser目录中搜索Parser.Parser。请注意 Parser.Parser 是相对于根目录的。如果根目录不在搜索路径中,解释器将找不到同目录下其他文件引入的文件。
上下文
我正在尝试 运行 使用 pytest 进行单元测试,但是,测试文件无法找到模块,因为它们继承自抽象 class。
更具体地说,我有以下目录结构:
project
|- __init__.py
|- project.py
|- JsonParser.py
|- Parser.py
|- tests
|__init__.py
|-test_JsonParser.py
JsonParser 具有以下导入:
from Parser import Parser
test_JsonParser.py 具有以下导入:
from project.JsonParser import JsonParser
目标是从 'project' 父目录中的 JsonParser 导入 JsonParser class。当我尝试这个时,pytest 提出以下投诉:
ModuleNotFoundError: No module named 'Parser'
相关修复尝试
因为下面的话题,我选择了相应的目录结构。当没有抽象基础的继承 class 时,它工作得很好。我怀疑问题在于 JsonParser 如何导入解析器。有一个嵌套的导入,pytest 无法协调这一点,即使 运行ning 来自父目录
What is the best project structure for a Python application?
下面的帖子是我最接近答案的帖子,但它变成了先有鸡还是先有蛋的问题。如果我做成相对路径,我就无法执行'project.py',因为它无法定位到Parser.
的相对路径Python, import package module when class inherit abstract class
编辑:我应该提到我 运行 我的测试如下:
pytest tests/test_JsonParser.py
看来诀窍是按以下方式执行:
Python -m pytest project/tests
这样做会将根目录添加到搜索路径中。 运行 只有 pytest 不在 Python 文件搜索路径中包含根目录。例如,当使用'pytest '执行测试时,Parser将无法导入到JsonParser中,因为解释器只会在Parser目录中搜索Parser.Parser。请注意 Parser.Parser 是相对于根目录的。如果根目录不在搜索路径中,解释器将找不到同目录下其他文件引入的文件。