python单元测试因源代码中的相对导入而失败
我的python源代码和unittest代码结构如下所示:python单元测试因源代码中的相对导入而失败,python,unit-testing,python-unittest,Python,Unit Testing,Python Unittest,我的python源代码和unittest代码结构如下所示: bin/ module1.py module2.py module3.py test/ module1_test.py 模块中的代码如下所示: 模块1.py from module2 import testMethod1, testMethod2 def testMethodY(): ... ... ... 模块2.py from module3 import testMeth
bin/
module1.py
module2.py
module3.py
test/
module1_test.py
模块中的代码如下所示:
模块1.py
from module2 import testMethod1, testMethod2
def testMethodY():
...
...
...
模块2.py
from module3 import testMethod4
模块3.py
def testMethod4():
模块1_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,这些相对导入失败了。有人能告诉我我犯了什么错误吗。在测试文件夹中创建一个
\uuu init\uuuuuuuy.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)
在测试文件夹中创建一个
\uuuuuu init\uuuuuuuuuuupy
模块,并将以下内容添加到其中:
import sys, os
path = os.path.dirname(__file__)
path = os.path.join(path, 'bin')
if path not in sys.path:
sys.path.append(path)
我认为您的
path
append语句不正确。您正在添加/bin
,它将在磁盘根目录中查找bin
sys.path.append(“/usr/lib/bin”)
我认为您的path
append语句不正确。您正在添加/bin
,它将在磁盘根目录中查找bin
sys.path.append(“/usr/lib/bin”)
问题是由于另一个同名模块来自python libs。我重新命名了它,解决了这个问题。另一种有帮助的方法是将模块设置为PYTHONPATH。问题是因为另一个同名模块来自pythonlibs。我重新命名了它,解决了这个问题。另一个有用的方法是将模块设置为PYTHONPATH。你能告诉dir结构吗,比如bin
和其他dir?bin和test在同一个dir/usr/lib/Sandy中——我认为你需要清理你的示例。在某个地方,你正在做一个简单的打字错误,这可能会导致你的问题,但有太多的错误来帮助你。例如,模块1中的
(这里不能有空格。此外,您引用了testMethodY
,但您的异常提到了testMethod4
。请尝试将此简化为最小的可复制示例。您能告诉dir结构,例如bin
和其他dir吗?bin和test在同一个dir/usr/lib/Sandy中--我认为您需要清理您的ex例如,您在某个地方输入了一个简单的打字错误,这可能会导致您的问题,但有太多的错误需要帮助。例如,模块1中的
(你不能在那里留空格。另外,你引用了testMethodY
,但是你的异常提到了testMethod4
。试着把它简化为最小的可复制示例。我已经在module1_test.py中添加了上述代码。但是它不起作用。不确定我犯了什么错误。当你说它不起作用时——发生了什么事?如果你是的话。)如果遇到错误,请在您的问题描述中发布。我共享的配方在我们管理的几十个项目中都能很好地发挥作用。我在上面提到了错误:ImportError:无法导入名称testMethod4,我们看不到您在何处导入testMethod4
。请尝试将您的项目简化为一个模块和一个测试。然后尝试我分享的配方。我向你保证它会起作用。然后从那里开始构建。没关系——我看到了你的问题。按照我的建议去做——把代码放到tests
文件夹中的中,然后再试一次。我已经在module1\u test.py中添加了上面的代码。但是它不起作用。不确定我犯了什么错误。当你这么说的时候不起作用——发生了什么?如果您遇到了错误,请在问题描述中发布。我共享的配方在我们管理的几十个项目中都非常有效。我在上面提到了错误:ImportError:无法导入名称testMethod4,我们看不到您在哪里导入testMethod4
。请尝试将您的项目简化为一个简单的示例le module and single test.然后尝试我共享的配方。我向您保证它会起作用。然后从那里开始构建。没关系——我看到了您的问题。按照我的建议执行——将代码放入init\uuuuuuuuuuuuuuuuy.py
文件夹中的tests
中,然后重试您的示例。我将其更改为import sys,os path=os.path.dirname(文件)path=os.path.join(路径“bin”)还有同样的问题。bin目录中必须有init.py吗?如果没有init.py,我们不能从包中导入文件吗?是的,如果你想让你的目录被识别为一个包,你需要\uu init\uuuuuuuuuupy
,如下所述。我将其更改为import sys,os path=os.path.dirname(文件)path=os.path.join(path,'bin'),仍然是同一个问题。bin目录中必须有init.py吗?如果没有init.py,我们不能从包中导入文件吗?是的,如果要将目录识别为包,则需要\u init\u.py
,如下所述。