【问题标题】:Python import src modules when running testsPython 在运行测试时导入 src 模块
【发布时间】:2011-06-13 06:15:17
【问题描述】:

我的源文件位于 src 下,我的测试文件位于 tests 下。当我想运行一个测试文件时,比如 python myTest.py,我得到一个导入错误:“No module named ASourceModule.py”。

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

【问题讨论】:

    标签: python unit-testing import


    【解决方案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_installpip 轻松安装鼻子:

    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/…
      猜你喜欢
      • 2012-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多