【发布时间】:2011-06-13 06:15:17
【问题描述】:
我的源文件位于 src 下,我的测试文件位于 tests 下。当我想运行一个测试文件时,比如 python myTest.py,我得到一个导入错误:“No module named ASourceModule.py”。
如何从源代码中导入运行测试所需的所有模块?
【问题讨论】:
标签: python unit-testing import
我的源文件位于 src 下,我的测试文件位于 tests 下。当我想运行一个测试文件时,比如 python myTest.py,我得到一个导入错误:“No module named ASourceModule.py”。
如何从源代码中导入运行测试所需的所有模块?
【问题讨论】:
标签: python unit-testing import
您需要将该目录添加到路径中:
import sys
sys.path.append('../src')
如果你经常使用它,可以把它放到一个模块中。
【讨论】:
如果您不想将源路径添加到每个测试文件或更改您的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/
【讨论】:
__init__.py 是必要的。”
在我的系统 (Windows 10) 上,我需要执行以下操作:
import sys
import os
sys.path.append(os.path.dirname(os.path.realpath(__file__)) + "/../src")
将相对目录直接附加到sys.path 不起作用
【讨论】:
最好的(最易于管理的)解决方案似乎是使用 virtualenv 和 setuptools/distribute 来安装您的 (src) 包的开发副本。这样,您的测试将针对完全“安装”的系统执行。
在 pystest 文档中有一个关于“良好实践”的部分解释了这种方法,请参阅 here。
【讨论】: