python - mock.patch.object(... 和 mock.patch(

标签 python unit-testing mocking

我试图了解这两种模拟方法之间的区别。有人可以帮助区分它们吗?对于这个例子,我使用 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/

相关文章:

python - 如何从字典中返回值列表?

java - 这种情况下如何通过API进行单元测试呢?

unit-testing - mockRequest 在 grails 2.x 中不起作用

java - Mockito 匹配特定的类参数

java - 如何断言在 void 方法中创建的值?

python - python中的文本文件循环缓冲区

python - 如何使用 2 个条件属性对 python 列表进行排序

python - 如何使用 SWIG 在 python 中扩展模板化的 c++ 类以允许 [] 运算符

javascript - 模拟 es6 模块返回工厂函数(moment.js)

Ruby 使用 StringIO 模拟一个文件