2+组模拟

时间:2019-09-19 22:01:00

标签: python unit-testing testing python-mock

说我有

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 :(得分:0)

您可以使用一个函数,该函数将要修补的目标对象作为参数,并返回一个装饰函数,该装饰函数遍历目标对象以使用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