繁体   English   中英

Python 运行测试时导入 src 模块

[英]Python import src modules when running tests

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

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

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

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 (例如from package import module )。 然后通过在项目文件夹中运行nosetests测试来运行测试。 您还可以通过执行nosetests tests/test_module.py来运行特定测试。

如果您想从其中运行测试,则tests目录中的__init__.py是必需的。

您可以使用easy_installpip轻松安装鼻子:

easy_install nose

要么

pip install nose

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

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

import sys
import os
sys.path.append(os.path.dirname(os.path.realpath(__file__)) + "/../src")

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

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

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

对于那些使用Pytest 的人:

  • 通过在里面放置一个空的__init__.py确保src被识别为 package。
  • 在项目文件夹中放置一个空的conftest.py
  • 确保test目录中没有__init__.py

看起来像这样:

project
    conftest.py
    src
        __init__.py
        module.py
    test
        test_module.py

并确保module.py包含以下行:

from src import module

来源: Pytest 文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM