Как реализовать функцию, которая печатает строку с именем и компанией по умолчанию?
Что проверяют
Для QA-инженера это вопрос не столько про синтаксис, сколько про тестируемость: умеете ли вы писать вспомогательный код для автотестов и знаете ли, как проверить функцию, которая только печатает. Следом часто просят написать на неё тест или спрашивают про ловушку с изменяемыми значениями по умолчанию.
Как отвечать
В автотестах чаще всего Python, так что пример на нём: def greet(name: str, company: str = "Ромашка") -> str. Параметр со значением по умолчанию ставится после обязательных, иначе SyntaxError. Вызывать можно позиционно или по имени: greet("Анна", company="Лютик").
Дальше покажите, что понимаете механику и тестирование:
- формирование строки: f-строка
f"Имя: {name}, компания: {company}"; - возврат вместо печати: функция возвращает строку, а
printделает вызывающий код. Такую функцию проверяют однимassertбез перехвата вывода; - если печать обязательна: в
pytestвывод ловится фикстуройcapsys, аcapsys.readouterr().outсодержит напечатанное вместе с переводом строки в конце; - параметризация:
@pytest.mark.parametrizeпрогоняет один тест по набору случаев: без аргументов, только имя, только компания, пустая строка; - изменяемые значения по умолчанию: они вычисляются один раз, при определении функции.
def f(tags=[])будет копить элементы между вызовами, правильноtags=Noneи создание списка внутри.
Если на собеседовании другой язык, скажите, как там. В Java параметров по умолчанию нет, вместо них перегрузка метода. В Go их тоже нет: пишут две функции или передают структуру с опциями и подставляют значение, если поле пустое.
Где спотыкаются
Пишут функцию, которая только печатает, и потом не могут объяснить, как её проверить. Для тестировщика это заметный промах.
Сравнивают вывод без учёта \n, который добавляет print, и тест падает на ровном месте.
Не знают про изменяемые значения по умолчанию. В тестовых утилитах это даёт плавающие падения: данные одного теста протекают в другой.