【问题标题】:Mocking a Python object without method calls在没有方法调用的情况下模拟 Python 对象
【发布时间】:2021-05-11 14:38:51
【问题描述】:

想象一个像这样的类:

class Foo():

    def method_1(self):
        bar = Bar()
        bazz = Bazz(bar)
        return bazz.method_2()

对于单元测试,我们如何模拟Bar 对象,当我们从不调用它的任何方法时,我们只是将它作为参数传递给Bazz 构造函数? (是的,这并不理想,但这种模式可以在通过依赖注入将不同对象连接在一起的顶级类中找到。

【问题讨论】:

  • 你可以像往常一样模拟它,例如@mock.patch("foo.Bar") 之类的东西(前提是您像 from bar import Bar 一样导入它)。也许我不明白这个问题?

标签: python python-mock pytest-mock


【解决方案1】:

你确实调用了Bar对象,当你执行时:bar = Bar(),所以你可以轻松地模拟它:

mock_bar = mocker.MagicMock(name='Bar')
mocker.patch('foo.Bar', new=mock_bar)
# mock_foo.return_value = the new mocked object

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-24
    • 2017-12-11
    • 2014-02-11
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多