Python 模拟类的Patch属性

Python 模拟类的Patch属性,python,python-3.x,pytest,magicmock,pytest-mock,Python,Python 3.x,Pytest,Magicmock,Pytest Mock,我试图模仿一门课 我试图模拟的类如下所示(为了简洁起见,删除了行): 类连接(对象): “”连接。 """ 定义初始化(self,base\u url=None,creds=None,user\u agent=None): self.clients=ClientFactory(self) 如您所见,它有一个名为clients的属性 我的测试方法: def_auth(自我,凭证): 连接=连接(基本url=f'https://someurl.com,creds=credentials) 返回连接

我试图模仿一门课

我试图模拟的类如下所示(为了简洁起见,删除了行):

类连接(对象):
“”连接。
"""
定义初始化(self,base\u url=None,creds=None,user\u agent=None):
self.clients=ClientFactory(self)
如您所见,它有一个名为
clients
的属性

我的测试方法:

def_auth(自我,凭证):
连接=连接(基本url=f'https://someurl.com,creds=credentials)
返回连接.客户端
我的单元测试如下所示:

@patch('connection.connection.\uuuuu init\uuuuuuu'))
def测试_部署(补丁_连接,fs):
已修补的\u连接。返回\u值=无
已修补的_connection.clients=无
#做点什么
问题是。。。我如何在测试中设置
clients
属性,因为测试中的方法需要设置它?(我可以将其设置为
,但我只需要能够进行设置。)

使用当前代码,我的应用程序返回错误:

AttributeError:“连接”对象没有“客户端”属性

谢谢

您可能希望修补
连接
类本身,而不是
\uuuu init\uuu
方法:

@patch('connection.connection'))
def测试_部署(补丁_连接,fs):
连接\对象=MagicMock()
已修补的\u连接。返回\u值=连接\u对象
连接\u object.clients=None
sut=Auth()#创建测试对象(Auth是此处的占位符)
sut._auth(“”)#调用被测试函数
#测试“连接”是如何构造的
已修补的\u连接。断言\u使用(
基本url=https://someurl.com“,信誉=”)
修补
连接
类,通过设置
返回值
设置
连接
实例模拟。现在,您可以在该实例中设置所需的属性

请注意,检查
\uuuu init\uuuu
调用实际上意味着检查实例创建调用,因此您可以使用
连接
模拟


当然,这是假设您不想测试
连接本身,并且
\u auth
属于另一个类(这里称为
auth
)。

这是可行的,但另一个问题……之前我有一个断言
修补了连接。assert\u用(…)调用了\u
。如何更新断言,以确保使用预期参数调用
\uuuu init\uuu
?谢谢我用所需的断言修改了答案-请检查!