Ответ
Тестирование прерываний проверяет, как приложение реагирует на внешние события, прерывающие его нормальную работу. Основные кейсы:
1. Прерывание по таймауту Проверка обработки долгих операций. Например, функция с бесконечным циклом должна быть прервана по истечении заданного времени.
import signal
def timeout_handler(signum, frame):
raise TimeoutError("Operation timed out")
signal.signal(signal.SIGALRM, timeout_handler)
signal.alarm(5) # Прервать через 5 секунд
try:
long_running_task()
except TimeoutError:
print("Task correctly interrupted")
2. Прерывание внешним событием Например, нажатие кнопки "Отмена" или системного уведомления во время загрузки.
// Эмуляция клика по кнопке "Stop" во время операции
const stopButton = document.getElementById('stopButton');
simulateClick(stopButton);
// Ожидаем остановки загрузки и корректного состояния UI
3. Прерывание из-за ошибки Проверка обработки исключительных ситуаций (например, деление на ноль).
@Test
public void testDivisionByZeroInterruption() {
Calculator calc = new Calculator();
assertThrows(ArithmeticException.class, () -> calc.divide(10, 0));
}
4. Прерывание по потере соединения Отключение сети во время передачи данных. Приложение должно корректно завершить сессию, сохранить состояние или уведомить пользователя.
5. Пользовательское прерывание (Ctrl+C) Для консольных приложений или фоновых процессов.
# Запуск и принудительная остановка
python long_script.py &
kill -SIGINT $! # Отправка сигнала прерывания
# Проверка корректного завершения (очистка ресурсов)
Почему это важно: Неправильная обработка прерываний может привести к утечкам памяти, повреждению данных или "зависанию" приложения.