Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
С какими Exceptions сталкивался в Java?
В качестве QA Automation Engineer с фокусом на Java, работа с исключениями (Exceptions) — это неотъемлемая часть как разработки автотестов, так и анализа падений приложения. Исключения в Java делятся на два основных типа: checked (проверяемые) и unchecked (непроверяемые). В своей практике я сталкиваюсь с обоими, но в контексте автоматизации чаще возникают unchecked исключения, так как они связаны с ошибками времени выполнения, которые часто выявляются в процессе тестирования.
Checked Exceptions (Проверяемые исключения)
Это исключения, которые компилятор обязывает обрабатывать либо через try-catch, либо объявлять в сигнатуре метода с помощью throws. В автотестах они часто возникают при работе с I/O операциями или сетевыми запросами.
IOExceptionи его подклассы (FileNotFoundException,EOFException): возникают при работе с файлами, сетью. Например, при чтении конфигурационных файлов для тестов или записи логов.try { BufferedReader reader = new BufferedReader(new FileReader("config.properties")); } catch (FileNotFoundException e) { // Обработка отсутствия файла, логирование, создание файла по умолчанию }ParseException: при парсинге дат или сложных строк, например, в тестах, обрабатывающих данные из внешних источников.SQLException: при работе с базами данных в интеграционных тестах, когда нужно проверить состояние БД после выполнения операций.
Unchecked Exceptions (Непроверяемые исключения)
Эти исключения наследуются от RuntimeException и не требуют обязательной обработки на этапе компиляции. В автотестах они часто сигнализируют о багах в тестируемом приложении или ошибках в логике самих тестов.
NullPointerException: одна из самых частых проблем. Возникает при попытке вызвать метод или обратиться к полю уnull-ссылки. В автотестах — например, если ожидаемый объект на веб-странице (в Selenium) не найден и возвращаетnull.WebElement button = driver.findElement(By.id("submit")); button.click(); // NullPointerException, если элемент не найденArrayIndexOutOfBoundsExceptionиIndexOutOfBoundsException: при обращении к несуществующему индексу массива или коллекции. Актуально при работе с динамическими списками в UI или при парсинге JSON/XML ответов в API-тестах.IllegalArgumentException: когда методу передаётся некорректный аргумент. Например, при установке невалидного таймаута вWebDriverWait.IllegalStateException: указывает на некорректное состояние объекта. В контексте Selenium WebDriver может возникать при попытке взаимодействия с браузером после его закрытия (driver.quit()).NoSuchElementException(из Selenium): частый гость в UI-автотестах, когда локатор элемента не срабатывает. Хотя это исключение специфично для Selenium, оно является unchecked.StaleElementReferenceException(Selenium): возникает, когда элемент был найден, но DOM изменился, и ссылка на элемент устарела. Требует перепоиска элемента.TimeoutException(изjava.util.concurrentили Selenium): при превышении времени ожидания, например, вWebDriverWaitили при выполнении асинхронных операций.AssertionError: хотя это не исключение в классической иерархии (наследуется отError), в тестах он ведёт себя аналогично. Выбрасывается при провале утверждения в JUnit/TestNG (Assert.assertEquals(),assertTrue()и т.д.) и указывает на расхождение ожидаемого и фактического результата.@Test public void testLogin() { String actualTitle = driver.getTitle(); Assert.assertEquals("Home Page", actualTitle); // AssertionError, если заголовок не совпал }
Обработка исключений в автотестах
В автотестах исключения используются не только для обработки ошибок, но и для валидации негативных сценариев. Например, мы можем ожидать, что при неверных данных приложение выбросит определённое исключение, и проверять это с помощью assertThrows() в JUnit 5.
@Test
public void testInvalidInputThrowsException() {
Calculator calculator = new Calculator();
// Проверяем, что при делении на ноль выбрасывается ArithmeticException
assertThrows(ArithmeticException.class, () -> calculator.divide(10, 0));
}
Также важно грамотно обрабатывать исключения в before/after методах (например, @AfterMethod в TestNG), чтобы гарантировать закрытие ресурсов (браузер, соединение с БД) даже при падении теста, и использовать логирование (например, через SLF4J + Logback) для записи деталей исключения, что критично для последующего анализа.
Таким образом, понимание иерархии и типов исключений в Java позволяет не только писать стабильные автотесты, но и эффективно анализировать причины их падений, разделяя ошибки в тестах и реальные дефекты приложения.