Переделайте цикл обработки команд так, чтобы для тестирования он читал команды из генератора, включая корректные и некорректные случаи, а не через `input()`.

Отделите источник команд от их обработки: функция должна принимать iterable, а тест передавать генератор с корректными, ошибочными командами и завершением.

Короткий ответ

Что ответить на собеседовании

Отделите источник команд от их обработки: функция должна принимать iterable, а тест передавать генератор с корректными, ошибочными командами и завершением.

Подробный разбор

Ответ с пояснениями

Отделите источник команд от их обработки: функция должна принимать iterable, а тест передавать генератор с корректными, ошибочными командами и завершением.

Исходный цикл не приведён, поэтому ниже шаблон для условных команд ping и exit, а не замена неизвестной бизнес-логики:

def process(commands):
    for raw in commands:
        command = raw.strip()
        if command == 'exit':
            break
        yield 'pong' if command == 'ping' else 'invalid'

def test_commands():
    yield 'ping'
    yield 'unknown'
    yield ''
    yield 'exit'
    yield 'ping'  # уже не обрабатывается

assert list(process(test_commands())) == ['pong', 'invalid', 'invalid']

Для реального приложения обработчик команд оставляют прежним, меняют только зависимость от input. Отдельно проверяют исчерпание генератора, пробелы и ошибки формата.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее