問題描述
我熟悉其他語言中的其他模擬庫(kù),例如 Java 中的 Mockito,但 Python 的 mock
庫(kù)讓我感到困惑.
我想測(cè)試以下課程.
類 MyClassUnderTest(object):def 子方法(自我,*args):do_dangerous_things()def main_method(self):self.submethod("什么都沒有.")
在我的測(cè)試中,我想確保在執(zhí)行 main_method
時(shí)調(diào)用了 submethod
并且使用正確的參數(shù)調(diào)用它.我不希望 submethod
運(yùn)行,因?yàn)樗鼤?huì)做危險(xiǎn)的事情.
我完全不確定如何開始使用它.Mock 的文檔非常難以理解,我不確定要模擬什么或如何模擬它.
我怎樣才能模擬 submethod
函數(shù),同時(shí)保留 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(目標(biāo), 屬性, new=DEFAULT,規(guī)格=無,創(chuàng)建=假,規(guī)格集=無,autospec=None, new_callable=None, **kwargs)
<塊引用>
使用模擬對(duì)象修補(bǔ)對(duì)象(目標(biāo))上的命名成員(屬性).
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.
這篇關(guān)于僅模擬對(duì)象上的單個(gè)方法的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!