2011-01-21 66 views
20

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

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

+1

[运行单元测试用典型的测试目录结构]的可能的复制(http://stackoverflow.com/questions/1896918/running-unittest-with-典型测试目录结构) – Asqiir 2017-03-05 08:12:39

回答

22

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

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

如果你使用了很多也许把这个变成一个模块。

+0

这不是OS不可知的。请参阅[答案](https://stackoverflow.com/a/34938623/1509695)在linux和Windows上都有相同的代码工作。 – matanster 2018-01-30 07:06:14

0

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

12

如果您不想将源路径添加到每个测试文件或更改您的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来运行特定的测试。

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

您可以easy_installpip轻松安装鼻子:

easy_install nose 

pip install nose 

鼻子伸出了很多单元测试更多的方式,更多地了解它,你可以查看他们的网站:https://nose.readthedocs.org/en/latest/

+0

+1“如果你想从里面运行测试,tests目录中的`__init __。py`是必须的。” – 2018-02-14 15:13:15

3

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

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

直接追加相对目录sys.path没有工作