如何在Python中的对象的模拟方法中调用self?

Ngo*_*ran 18 python mocking

我尝试测试一些代码,这些代码不返回任何内容,只是将结果保存到数据库中.通过模拟save方法,我希望检查事情是否已正确处理:

def mock_save(self):
    assert(self.attr, 'dest_val')
with mock.patch.object(Item, "save", create=True) as save:
    save.side_effect = mock_save
    func_to_call() //in func_to_call, I call item.save()
Run Code Online (Sandbox Code Playgroud)

但是,似乎不允许这样做.它说参数数量不匹配.

如果我做def mock_save(),它将无法正常工作.

我怎样才能引用mock方法所依据的对象呢?(我在另一个适用于init方法的线程中看到它,可以直接从类中调用)

ale*_*n13 21

你需要 autospec=True

def mock_save(self):
    assert self.attr == 'dest_val'
with mock.patch.object(Item, "save", autospec=True) as save:
    save.side_effect = mock_save
    func_to_call()
Run Code Online (Sandbox Code Playgroud)

  • 添加 `autospec=True` 对我不起作用。我仍然收到相同的错误:`TypeError:mock_create_samples_cache() 恰好需要 1 个参数(给定 0 个)` (3认同)