Исправление функции с помощью Mock

У меня есть набор тестов (, использующий нос, а не unittest), и я хочу исправить функцию, чтобы возвращать определенную последовательность значений для каждого теста в тестовый класс. Моя первая попытка, используя упрощенный пример, была :

@patch('time.clock', MagicMock(side_effects=[1, 2]))
class Tests:
    def test_1(self):
        assert time.clock() == 1
        assert time.clock() == 2

    def test_2(self):
        assert time.clock() == 1
        assert time.clock() == 2

. Однако экземпляр MagicMock создается только один раз, поэтому второй тест завершается неудачей, когда заканчиваются побочные эффекты. Я могу пропатчить каждый тестовый метод отдельно, но мне не очень хочется дублировать декоратор патча на все из них (тестов гораздо больше, чем в этом примере! )Другой способ сделать это — создать патч в коде установки, подобный этому:

class Tests:
    def setup(self):
        self.old_clock = time.clock
        time.clock = MagicMock(side_effects=[1, 2])

    def teardown(self):
        time.clock = self.old_clock

    def test_1(self):
        assert time.clock() == 1
        assert time.clock() == 2

    def test_2(self):
        assert time.clock() == 1
        assert time.clock() == 2

Но сохранение и восстановление исходного определения функции похоже на то, что Mock должен уметь делать автоматически. Есть ли другой способ сделать это, который мне не хватает? Или мой последний пример лучший способ сделать это?

5
задан aquavitae 3 February 2014 в 11:52
поделиться