我的代码组织如下:
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")
尝试在类Y
中找到dir.A.A
,而不是在模块dir.A
中(实际存在的位置)。
这显然是因为我__init__.py
。我可以通过将模块名A
和类名A
更改为不同的符号来解决这个问题。
代码的组织方式,我想避免这样的命名更改。如何以patch
的方式在正确的位置使用Y
?