Что выведет код Middle Тестирование и pytest обновлено

Mock записывает вызовы

Вопрос

Что выведет код? По строке на каждый print.

from unittest.mock import Mock

gateway = Mock()
gateway.charge.return_value = {'status': 'ok'}

def pay(gw, amount):
    if amount <= 0:
        return 'skip'
    return gw.charge(amount=amount)['status']

print(pay(gateway, 100), pay(gateway, 0))
print(gateway.charge.call_count, gateway.charge.call_args.kwargs)

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: ok skip, 1 {'amount': 100}. returnvalue задаёт ответ мока.

Что выведет

ok skip
1 {'amount': 100}

Разбор

return_value задаёт ответ мока. Для нуля функция не вызывает шлюз. Мок посчитал один вызов и запомнил его аргументы: call_args.kwargs хранит именованные аргументы последнего вызова.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме