我试图了解这两种模拟方法之间的区别。有人可以帮助区分它们吗?对于这个例子,我使用 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)
最佳答案
您已经发现了不同之处; mock.patch()
接受一个字符串,该字符串将在应用补丁时解析为一个对象,mock.patch.object()
接受一个直接引用。
这意味着 mock.patch()
不需要您在修补之前导入对象,而 mock.patch.object()
确实需要您导入在修补之前。
如果您已经拥有对该对象的引用,则后者更易于使用。
关于python - mock.patch.object(... 和 mock.patch(,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29152170/