mock.patch.object(。。。还有mock.patch(

2024-09-25 00:33:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解这两种嘲笑方法的方法之间的区别。有人能帮忙分辨一下吗?对于这个例子,我使用passlib库。

from passlib.context import CryptContext
from unittest import mock

with mock.patch.object(CryptContext, 'verify', return_value=True) as foo1:
    mycc = CryptContext(schemes='bcrypt_sha256')
    mypass = mycc.encrypt('test')
    assert mycc.verify('tesssst', mypass)

with mock.patch('passlib.context.CryptContext.verify', return_value=True) as foo2:
    mycc = CryptContext(schemes='bcrypt_sha256')
    mypass = mycc.encrypt('test')
    assert mycc.verify('tesssst', mypass)

Tags: 方法fromimporttruereturnvaluewithcontext
1条回答
网友
1楼 · 发布于 2024-09-25 00:33:14

您已经发现了差异;mock.patch()接受一个字符串,该字符串将在应用修补程序时解析为一个对象,mock.patch.object()接受一个直接引用。

这意味着mock.patch()不需要在修补之前导入对象,而mock.patch.object()需要在修补之前导入。

如果已经有对象的引用,则后者更易于使用。

相关问题 更多 >