Издевательствовать только один метод на объекте
Я знаком с другими издевательскими библиотеками на других языках, таких как Mockito в Java, но библиотека Python mock
путает меня жизнь.
У меня есть следующий класс, который я бы хотел проверить.
class MyClassUnderTest(object):
def submethod(self, *args):
do_dangerous_things()
def main_method(self):
self.submethod("Nothing.")
В моих тестах я хотел бы убедиться, что submethod
был вызван при выполнении main_method
и что он был вызван с правильными аргументами. Я не хочу, чтобы submethod
запускался, так как он делает опасные вещи.
Я совершенно не уверен, как начать с этого. Макет документации невероятно трудно понять, и я не уверен, что даже макет или как насмехаться над этим.
Как я могу фальсифицировать функцию submethod
, оставив только функции main_method
?
Ответы
Ответ 1
Я думаю, что вы ищете 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)
Вот небольшое описание
patch.object(target, attribute, new=DEFAULT,
spec=None, create=False, spec_set=None,
autospec=None, new_callable=None, **kwargs)
исправить именованный элемент (атрибут) объекта (цели) с помощью макета.