Динамический мокинг с использованием патчей из unittest в Python
Я собираюсь подражать функции Python в модульных тестах.
Это главная функция.
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)
Я пытаюсь подружить get_users_from_api
функцию в модульном тесте, потому что она вызывает сторонний api endpoint.
Это тестовый сценарий.
@patch("api.get_users_from_api")
def test_get_users(self, mock_get_users)
user_ids = [1, 2, 3]
mock_get_users.return_value = {
id: 1,
first_name: "John",
last_name: "Doe",
...
} # mock response
get_users(user_ids) # call main function
Проблема в том, что я получаю одинаковый результат для всех пользователей, потому что я использовал только один mock в качестве возвращаемого значения get_users_from_api
.
Я хочу подкалывать разные значения для каждого пользователя. Как я могу это сделать?
Вы можете использовать side_effect
в unittest.mock.
это код.
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
get_users(user_ids) # call main function