我的代码组织结构如下:
dir/A.py:
from X import Y
class A:
...
dir/__init__.py:
from .A import A
__all__ = ['A']
测试/test_A.py:
class test_A:
@patch("dir.A.Y")
def test(self, mock_Y):
....
在运行 tests/test_A.py 时,我(如预期)收到以下错误:AttributeError: <class 'dir.A.A'> does not have the attribute 'Y'
问题在于@patch("dir.A.y")
试图在类dir.A.A
中查找Y
,而不是在模块dir.A
中(实际上它在那里)。这显然是由于我的
__init__.py
引起的。我可以通过更改模块名称A
和类名称A
为不同的符号来克服这个问题。按照代码组织方式,我想避免这样的命名更改。如何使用
patch
以便它可以在正确的位置找到Y
?