Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python单元测试因源代码中的相对导入而失败_Python_Unit Testing_Python Unittest - Fatal编程技术网

python单元测试因源代码中的相对导入而失败

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

我的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 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
,如下所述。