Дразнить только один метод над объектом

Я знаком с другими библиотеками-насмешками на других языках, такими как 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 один?

17 голосов | спросил Naftuli Kay 2 62013vEurope/Moscow11bEurope/MoscowSat, 02 Nov 2013 03:33:33 +0400 2013, 03:33:33

1 ответ


0

Я думаю, что вы ищете 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)
  

соединить именованный элемент (атрибут) объекта (цели) с фиктивным объектом.

ответил oleg 2 62013vEurope/Moscow11bEurope/MoscowSat, 02 Nov 2013 03:47:30 +0400 2013, 03:47:30

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132