如果测试模块位于姐妹文件夹中,如何让我的 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 在运行测试时导入 src 模块

如何让我的动画功能快速依赖于客观的 c mic 打击检测?

如何让我的 Python 模块在 Linux 系统范围内可用?

python3.3不自带的模块或工具包 下载以后要怎么处理才能在开发环境中调用 (比如放到pyth

执行测试时找不到Go模块包[关闭]