python unittest在源代码中使用相对导入失败

时间:2015-07-18 07:44:16

标签: python unit-testing python-unittest

我在以下层次结构中有我的python源代码和unittest代码结构:

bin/
    module1.py
    module2.py
    module3.py
test/
    module1_test.py

模块中的代码如下: module1.py

from module2 import testMethod1, testMethod2
def testMethodY():
    ...
    ...
    ...

module2.py

from module3 import testMethod4

module3.py

def testMethod4():

module1_test.py

import unittest
import sys, os
path = os.path.dirname(__file__)
path = os.path.join(path, 'bin')
sys.path.append("/bin")
from module1 import testMethodY

...(Some code for unit test)

当我运行python module1_test.py时 它因导入错误而失败:

ImportError: cannot import name testMethod4

不确定是什么问题。如果我运行源代码,那么所有导入工作正常。但是使用python unittest这些相对导入失败了。谁能告诉我我在做什么错误。

3 个答案:

答案 0 :(得分:4)

在tests文件夹中创建一个__init__.py模块,并将以下内容添加到其中:

import sys, os
path = os.path.dirname(__file__)
path = os.path.join(path, 'bin')
if path not in sys.path:
    sys.path.append(path)

答案 1 :(得分:2)

我认为您的path追加声明不正确。您要附加/bin,它会在磁盘根目录中查找bin

sys.path.append("/usr/lib/bin")

答案 2 :(得分:0)

问题是因为另一个来自python libs的同名模块。我重命名了它,这解决了这个问题。另一种有用的方法是将模块设置为PYTHONPATH。