Что такое assertions (утверждения) в Java?

«Что такое assertions (утверждения) в Java?» — вопрос из категории Тестирование, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Assertions (утверждения) в Java — это механизм проверки инвариантов (логических условий) во время выполнения программы. Они используются для отладки и валидации внутренних предположений о состоянии кода, которые должны быть всегда истинны.

Ключевые аспекты:

  • Цель: Обнаружение логических ошибок на этапе разработки и тестирования. Не предназначены для обработки ошибок времени выполнения или валидации пользовательского ввода в production-коде.
  • Управление: Утверждения по умолчанию отключены в JVM. Для их активации необходимо передать флаг -ea (или -enableassertions). Флаг -da отключает их.
  • Поведение: Если утверждение (assert) ложно, JVM генерирует ошибку AssertionError, что обычно приводит к аварийному завершению программы.

Синтаксис:

assert условие; // Простая форма
assert условие : выражение; // Форма с детализирующим сообщением (выражение вычисляется в строку)

Пример:

public class Account {
    private double balance;

    public void withdraw(double amount) {
        // Внутренняя проверка: сумма снятия должна быть положительной
        assert amount > 0 : "Сумма снятия должна быть положительной: " + amount;
        // Проверка бизнес-инварианта: баланс не может стать отрицательным
        assert (balance - amount) >= 0 : "Недостаточно средств. Баланс: " + balance;

        balance -= amount;
    }
}
// Запуск: java -ea Account

Когда использовать: Для проверки внутренних инвариантов методов, условий, которые «никогда не должны нарушаться», и в модульных тестах как альтернатива или дополнение к фреймворкам вроде JUnit.