运行测试时Python导入src模块

Kar*_*ran 35 python import unit-testing

我的源文件位于src下,我的测试文件位于测试中.当我想运行一个测试文件时,比如python myTest.py,我收到一个导入错误:"没有名为ASourceModule.py的模块".

如何从运行我的测试所需的源导入所有模块?

Tho*_*mas 29

您需要将该目录添加到路径:

import sys
sys.path.append('../src')
Run Code Online (Sandbox Code Playgroud)

如果你经常使用它,也许把它放到一个模块中.

  • 这与操作系统无关。请参阅[答案](/sf/answers/2445703641/),了解在Linux和Windows上具有相同的代码。 (2认同)

And*_*ira 15

如果您不想为每个测试文件添加源路径或更改您的源路径PYTHONPATH,则可以使用nose来运行测试.

假设您的目录结构如下:

project
    package
        __init__.py
        module.py
    tests
        __init__.py
        test_module.py
Run Code Online (Sandbox Code Playgroud)

您应该在test_module.py(例如from package import module)中正常导入模块.然后通过nosetests在项目文件夹中运行来运行测试.您也可以通过执行特定的测试nosetests tests/test_module.py.

__init__.pytests,如果你想运行从它里面的测试目录是必要的.

您可以使用easy_install或轻松安装鼻子pip:

easy_install nose
Run Code Online (Sandbox Code Playgroud)

要么

pip install nose
Run Code Online (Sandbox Code Playgroud)

nose以更多方式扩展unittest,要了解更多信息,您可以查看他们的网站:https://nose.readthedocs.org/en/latest/

  • +1 表示“如果您想从其中运行测试,则测试目录中的 `__init__.py` 是必需的。” (2认同)

Fra*_*yce 10

在我的系统(Windows 10)上,我被要求做这样的事情:

import sys
import os
sys.path.append(os.path.dirname(os.path.realpath(__file__)) + "/../src")
Run Code Online (Sandbox Code Playgroud)

直接附加相对目录sys.path不起作用


Bar*_*ark 5

最好(最易于管理)的解决方案似乎是使用 virtualenv 和 setuptools/distribute 来安装 (src) 包的开发副本。这样,您的测试将针对完全“安装”的系统执行。

在 pystest 文档中有一个关于“良好实践”的部分解释了这种方法,请参见此处

  • 这是最好的解决方案。另外两个可以工作,但不那么干净。对于初学者来说,使用上面的技巧可能比花几个小时了解 Python 打包更简单。如果你有时间,就选这个吧。 (3认同)
  • 答案中的链接已损坏,这是正确的 - https://docs.pytest.org/en/latest/explanation/goodpractices.html#test-discovery (3认同)