Python 在运行测试时导入 src 模块
Posted
技术标签:
【中文标题】Python 在运行测试时导入 src 模块【英文标题】:Python import src modules when running tests 【发布时间】:2011-06-13 06:15:17 【问题描述】:我的源文件位于 src 下,我的测试文件位于 tests 下。当我想运行一个测试文件时,比如 python myTest.py,我得到一个导入错误:“No module named ASourceModule.py”。
如何从源代码中导入运行测试所需的所有模块?
【问题讨论】:
【参考方案1】:您需要将该目录添加到路径中:
import sys
sys.path.append('../src')
如果你经常使用它,可以把它放到一个模块中。
【讨论】:
这与操作系统无关。请参阅the answer 了解在 linux 和 Windows 上使用相同的代码。【参考方案2】:如果您不想将源路径添加到每个测试文件或更改您的PYTHONPATH
,您可以使用nose 来运行测试。
假设你的目录结构是这样的:
project
package
__init__.py
module.py
tests
__init__.py
test_module.py
您应该在test_module.py
(例如from package import module
)中正常导入模块。然后通过在项目文件夹中运行nosetests
来运行测试。您还可以通过 nosetests tests/test_module.py
运行特定测试。
如果你想从里面运行测试,tests
目录中的__init__.py
是必需的。
您可以使用easy_install
或pip
轻松安装鼻子:
easy_install nose
或
pip install nose
nose 以更多方式扩展了 unittest,要了解更多信息,您可以查看他们的网站:https://nose.readthedocs.org/en/latest/
【讨论】:
+1 表示“如果你想从里面运行测试,测试目录中的__init__.py
是必要的。”【参考方案3】:
在我的系统 (Windows 10) 上,我需要执行以下操作:
import sys
import os
sys.path.append(os.path.dirname(os.path.realpath(__file__)) + "/../src")
将相对目录直接附加到sys.path
不起作用
【讨论】:
【参考方案4】:最好的(最易于管理的)解决方案似乎是使用 virtualenv 和 setuptools/distribute 来安装您的 (src) 包的开发副本。这样,您的测试将针对完全“安装”的系统执行。
在 pystest 文档中有一个关于“良好实践”的部分解释了这种方法,请参阅 here。
【讨论】:
这是最好的解决方案。另外两个工作,但不那么干净。对于初学者来说,使用上面的技巧可能会更简单,而不是花几个小时来理解 Python 打包。如果你有时间,就用这个吧。 答案中的链接已损坏,这是正确的 - docs.pytest.org/en/latest/explanation/…以上是关于Python 在运行测试时导入 src 模块的主要内容,如果未能解决你的问题,请参考以下文章