Как вы имитируете исправление класса Python и получаете новый объект Mock для каждого экземпляра?

ОК,
Я знаю, что это упоминается в руководствеи, вероятно, имеет отношение к side_effectи/или return_value, но простой прямой пример мне очень поможет.

У меня есть:

class ClassToPatch():
   def __init__(self, *args):
       _do_some_init_stuff()

   def some_func():
       _do_stuff()


class UUT():
    def __init__(self, *args)
       resource_1 = ClassToPatch()
       resource_2 = ClassToPatch()

Теперь я хочу провести модульное тестирование класса UUTи смоделировать ClassToPatch. Зная, что класс UUTсоздаст ровно два объекта ClassToPatch, я хочу, чтобы платформа Mock возвращала новый объект Mock для каждого экземпляра, чтобы позже я мог утверждать вызовы для каждого по отдельности.

Как мне добиться этого с помощью декоратора @patchв тестовом примере? А именно, как исправить следующий пример кода?

class TestCase1(unittest.TestCase):

    @patch('classToPatch.ClassToPatch',autospec=True)
    def test_1(self,mock1,mock2):
        _assert_stuff()

26
задан CivFan 6 July 2016 в 22:45
поделиться