问题描述
我熟悉其他语言中的其他模拟库,例如 Java 中的 Mockito,但 Python 的 mock
库让我感到困惑.
我想测试以下课程.
类 MyClassUnderTest(object):def 子方法(自我,*args):do_dangerous_things()def main_method(self):self.submethod("什么都没有.")
在我的测试中,我想确保在执行 main_method
时调用了 submethod
并且使用正确的参数调用它.我不希望 submethod
运行,因为它会做危险的事情.
我完全不确定如何开始使用它.Mock 的文档非常难以理解,我不确定要模拟什么或如何模拟它.
我怎样才能模拟 submethod
函数,同时保留 main_method
中的功能?
我想你要找的是 mock.patch.object
用 mock.patch.object(MyClassUnderTest, "submethod") 作为 submethod_mocked:submethod_mocked.return_value = 13MyClassUnderTest().main_method()submethod_mocked.assert_call_once_with(user_id, 100, self.context,self.account_type)
这里是小描述
patch.object(目标, 属性, new=DEFAULT,规格=无,创建=假,规格集=无,autospec=None, new_callable=None, **kwargs)
<块引用>
使用模拟对象修补对象(目标)上的命名成员(属性).
I'm familiar with other mocking libraries in other languages such as Mockito in Java, but Python's mock
library confuses the life out of me.
I have the following class which I would like to test.
class MyClassUnderTest(object):
def submethod(self, *args):
do_dangerous_things()
def main_method(self):
self.submethod("Nothing.")
In my tests, I'd like to make sure that the submethod
was called when main_method
was executed and that it was called with the right arguments. I don't want submethod
to run, as it does dangerous things.
I'm entirely unsure as to how to get started with this. Mock's documentation is incredibly hard to understand and I'm not sure what to even mock or how to mock it.
How can I mock the submethod
function, while leaving the functionality in main_method
alone?
I think what you are looking for is mock.patch.object
with mock.patch.object(MyClassUnderTest, "submethod") as submethod_mocked:
submethod_mocked.return_value = 13
MyClassUnderTest().main_method()
submethod_mocked.assert_called_once_with(user_id, 100, self.context,
self.account_type)
Here is small description
patch.object(target, attribute, new=DEFAULT,
spec=None, create=False, spec_set=None,
autospec=None, new_callable=None, **kwargs)
patch the named member (attribute) on an object (target) with a mock object.
这篇关于仅模拟对象上的单个方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!