Что такое конструкция switch-case?

«Что такое конструкция switch-case?» — вопрос из категории Java, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

switch-case — это управляющая конструкция в Java, предназначенная для выбора одного из множества блоков кода для выполнения на основе значения выражения. Она служит более читаемой и эффективной альтернативой длинным цепочкам if-else-if, когда проверяется одно и то же выражение на равенство с различными константами.

Базовый синтаксис (до Java 14):

switch (expression) {
    case value1:
        // Код для value1
        break; // Прерывает выполнение switch
    case value2:
        // Код для value2
        break;
    default:
        // Код, если ни один case не совпал (опционально)
}

Типы выражений: В switch можно использовать byte, short, char, int, их обёртки (Byte, Short и т.д.), String (с Java 7) и enum.

Пример из практики тестирования:

public String getStatusMessage(int httpCode) {
    String message;
    switch (httpCode) {
        case 200:
            message = "OK";
            break;
        case 404:
            message = "Not Found";
            break;
        case 500:
            message = "Internal Server Error";
            break;
        default:
            message = "Unknown Status";
    }
    return message;
}

Современный синтаксис (Java 14+, switch expressions): Более компактный и безопасный (исключает ошибку забытого break).

String message = switch (httpCode) {
    case 200 -> "OK";
    case 404 -> "Not Found";
    case 500 -> "Internal Server Error";
    default -> "Unknown Status";
};
// Тест:
assertEquals("Not Found", getStatusMessage(404));

Что важно для тестировщика:

  1. Покрытие ветвей: При тестировании метода, содержащего switch, необходимо обеспечить покрытие всех значимых case-ветвей и ветки default. Это классический объект для анализа покрытия кода (branch coverage).
  2. Поиск дефектов: Частая ошибка — "проваливание" (fall-through) из-за забытого break, что приводит к выполнению кода из нескольких case. Тесты должны выявлять такое поведение.
  3. Тестирование граничных значений: Особенно для default-ветки — проверка реакции на неожиданные или недокументированные входные значения.