Что выведет код Senior Тестирование и pytest обновлено
Mock без spec и опечатка в методе
Вопрос
Что выведет код? По строке на каждый print.
from unittest.mock import Mock, create_autospec
class Mailer:
def send(self, to, text):
pass
loose = Mock()
loose.sned('a@b.ru', 'hi')
print('loose ok')
strict = create_autospec(Mailer, instance=True)
try:
strict.sned('a@b.ru', 'hi')
except AttributeError:
print('strict caught typo')
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: loose ok, strict caught typo. Обычный Mock создаёт любой атрибут по первому обращению, поэтому опечатка sned молча проходит, и тест может зеленеть, проверяя не то. createautospec строит мок по настоящему классу: несуществующий метод даёт AttributeError, а неверное…
Что выведет
loose ok
strict caught typo
Разбор
Обычный Mock создаёт любой атрибут по первому обращению, поэтому опечатка sned молча проходит, и тест может зеленеть, проверяя не то. create_autospec строит мок по настоящему классу: несуществующий метод даёт AttributeError, а неверное число аргументов TypeError.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.