группа 2+ mock.patch в один - PullRequest
       22

группа 2+ mock.patch в один

1 голос
/ 20 сентября 2019

Скажем, у меня есть:

import mock
...

@mock.patch("function_1")
@mock.patch("function_2")
def my_test(self, f1, f2):
    f1.return_value="foo"
    f2.return_value="bar"
    ...

function_1 и function_2 очень похожи и вычеркнуты из нескольких функций тестирования.Я хотел бы модулировать этот шаблон (патчирования двух функций).Есть ли такой способ?Идеальный результат будет выглядеть примерно так:

@grouppatch("function_1_and_2")
def my_test(self):
    ...

1 Ответ

0 голосов
/ 20 сентября 2019

Вы можете использовать функцию, которая принимает целевые объекты для исправления в качестве параметров и возвращает функцию декоратора, которая перебирает целевые объекты для использования mock.patch для исправления объекта для оформленной функции:

def grouppatch(*targets):
    def decorator(func):
        for target in targets:
            func = mock.patch(target)(func)
        return func
    return decorator

так что:

@grouppatch('builtins.bool', 'builtins.int')
def my_test(mock_bool, mock_int):
    mock_bool.return_value = True
    mock_int.return_value = 100
    print(bool(False), int(10))

my_test()

выходы:

True 100
...