如果测试模块位于姐妹文件夹中,如何让我的 Python 单元测试导入测试模块?
Posted
技术标签:
【中文标题】如果测试模块位于姐妹文件夹中,如何让我的 Python 单元测试导入测试模块?【英文标题】:How to make my Python unit tests to import the tested modules if they are in sister folders? 【发布时间】:2011-01-16 18:43:12 【问题描述】:我仍然对import
声明感到困惑。如果我在同一级别有 2 个文件夹:
-
源代码
测试
如何让test
中的py
文件导入src
中的模块?
有没有更好的解决方案(比如将一个文件夹放在另一个文件夹中?)
【问题讨论】:
一个非常相似的问题:***.com/questions/1896918 【参考方案1】:你想要的代码是用于使用 src/module_name.py
from src import module_name
并且根目录在您的 PYTHONPATH 上,例如你从根目录运行
您的目录结构是我使用的,但型号名称来自 src。我从J Calderone's blog 和
得到了这个结构【讨论】:
包(文件夹)的名称中间可以有下划线吗? 另外,通过添加__init__.py
文件,确保 src 目录是一个包。
我将 src 目录添加到 PYTHONPATH,而不是 ROOT 路径。
Jader 是的,将 src 添加到 PYTHONPATH 确实有效 - 但您最终会获得许多条目并使其难以管理。如果您从项目的根目录运行,则无需更改环境
您可以在文件夹名称中包含 _,但这不是很好的样式(请参阅 PEP8)我只是用它来尝试在此处创建自记录代码。【参考方案2】:
试试这个:
import sys
import os
sys.path.append(os.path.join('..', 'src'))
import module_in_src_folder
经过编辑以支持任何平台
【讨论】:
投反对票,因为这涉及到 PYTHONPATH 的混乱。【参考方案3】:我写的所有python项目都和OP完全一样:
项目文件夹-
源代码
测试
所有模块,无论是在 src、test 还是这些模块的子文件夹中,总是使用 Mark 在他的回答中显示的 import
的形式:
from src import module_name
我所做的是编写一个位于 Project Folder
中的模块,并递归地发现测试文件夹中的所有测试模块并让 unittest 运行所有这些测试。由于 python 在Project Folder
中运行,因此模块是相对于工作目录的。
这意味着测试就像任何其他想要从 src
获取模块的客户端一样。
【讨论】:
以上是关于如果测试模块位于姐妹文件夹中,如何让我的 Python 单元测试导入测试模块?的主要内容,如果未能解决你的问题,请参考以下文章
最好的姐妹一口气拿下了8个测试岗的大厂offer,让我很有面子
如何让我的 Python 模块在 Linux 系统范围内可用?