将模拟调用的一部分定义为默认值

Defining part of a mock call as default values

我正在编写单元测试以确保使用正确的参数调用模拟方法。

我的部分单元测试如下所示:

response = MagicMock(name='response', status_code=200)

# Make some calls

expected_calls = [
    call(
        "X",
        "1",
        domain="mywebsite.com",
        httponly=True,
        max_age=1000,
        path="/",
        secure=False,
    ),
    call(
        "Y",
        "2",
        domain="mywebsite.com",
        httponly=True,
        max_age=1000,
        path="/",
        secure=False,
    ),
]
response.set_cookie.assert_has_calls(expected_calls)

也就是说,只有这些调用对象的key和value发生变化。

我怎样才能得到以下形式的东西:

default_values = {...}

expected_calls = [
    call(
        "X",
        "1",
        default_values,
        ),
    call(
        "Y",
        "2",
        default_values,
    ),
]

你快到了,也许你不知道你可以 star unpack 你 default_values dict。 Python 控制台的一个简单示例如下:

>>> d1 = dict(a=1, b=2)
>>> from unittest.mock import call
>>> call(1, 10, **d1)
call(1, 10, a=1, b=2)
>>> 

其中 d1 将是您的 default_values

这是可能的,因为 Python 3.5 根据 PEP448