关于单元测试:运行测试时Python导入src模块

Python import src modules when running tests

我的源文件位于SRC下,我的测试文件位于测试下。当我想运行一个测试文件(比如python mytest.py)时,会得到一个导入错误:"没有名为asourcemodule.py的模块"。

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


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

1
2
import sys
sys.path.append('../src')

如果你经常使用的话,可以把它放到一个模块里。


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

假设您的目录结构如下:

1
2
3
4
5
6
7
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目录中运行测试,则需要在tests目录中使用__init__.py

您可以使用easy_installpip轻松安装机头:

1
easy_install nose

1
pip install nose

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


在我的系统(Windows10)上,我被要求执行如下操作:

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

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


最好(最易管理)的解决方案似乎是使用virtualenv和setuptools/distribute来安装(src)包的andeblopment副本。这样,您的测试就可以在完全"安装"的系统上执行。