Начал писать тесты для бота. Оказалось не так страшно как думал
Долго откладывал тесты для своих ботов. Казалось что это боль: нужно мокать API, имитировать апдейты, непонятно с чего начать.
Начал с малого. Вынес всю бизнес-логику в отдельные функции которые не знают ничего про Telegram. Просто принимают данные, возвращают результат.
python
# Не так async def handle_payment(message: types.Message): amount = int(message.text) if amount > 10000: await message.answer("Сумма слишком большая") # А так def validate_amount(amount: int) -> tuple[bool, str]: if amount > 10000: return False, "Сумма слишком большая" return True, "" async def handle_payment(message: types.Message): is_valid, error = validate_amount(int(message.text)) if not is_valid: await message.answer(error)
Теперь validate_amount тестируется обычным pytest без всяких моков. Вызываешь функцию, проверяешь результат.
Звучит очевидно. Но я долго писал всю логику прямо в хендлерах и потом удивлялся почему тестировать неудобно. Оказывается проблема была не в тестах, а в архитектуре.
Покрытие пока небольшое, но уже несколько раз тесты поймали регрессию которую я бы заметил только в продакшене.
Кто тестирует ботов, как организуете?
