如何在Python中向unittest的side_effect发送额外的参数?

问题描述 投票:0回答:1

我在单元测试中使用 side_effect 进行动态模拟。 这是代码。

// main functionn
from api import get_users_from_api

def get_users(user_ids):
    for user_id in user_ids:
        res = get_users_from_api(user_id)

// test script
def get_dynamic_users_mock(user_id):
    mock_by_user_id = {
        1: {
            "id": 1,
            "first_name": "John",
            "last_name": "Doe",
            ...
        },
        2: {
            "id": 2,
            "first_name": "Jane",
            "last_name": "Smith",
            ...
        },
        ...
    }
    return mock_by_user_id[user_id]

@patch("api.get_users_from_api")
def test_get_users(self, mock_get_users)
    user_ids = [1, 2, 3]
    mock_get_users.side_effect = get_dynamic_users_mock # mock get_users_from_api
    get_users(user_ids) # call main function

我想从

test_get_users
向此
get_dynamic_users_mock
函数发送额外参数。

如何做到这一点?

python django python-unittest python-unittest.mock django-unittest
1个回答
0
投票

我不确定我是否理解你的意思,但你可以尝试这个。

def get_dynamic_users_mock(user_id, extra_parameter):
    mock_by_user_id = {
        1: {
            "id": 1,
            "first_name": "John",
            "last_name": "Doe",
            ...
        },
        2: {
            "id": 2,
            "first_name": "Jane",
            "last_name": "Smith",
            ...
        },
        ...
    }
    
    # do whatever with extra_parameter
    
    return mock_by_user_id[user_id]

@patch("api.get_users_from_api")
def test_get_users(self, mock_get_users)
    user_ids = [1, 2, 3]
    extra_paramter = 'extra'
    mock_get_users.side_effect = lambda user_id: 
        get_dynamic_users_mock(user_id, extra_parameter)
    get_users(user_ids)
© www.soinside.com 2019 - 2024. All rights reserved.