Какие структуры данных ты чаще всего применяешь в тестовом коде?

«Какие структуры данных ты чаще всего применяешь в тестовом коде?» — вопрос из категории Основы тестирования, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В тестовой автоматизации выбор структур данных напрямую зависит от задачи по валидации или подготовке данных.

Чаще всего я использую:

  • Коллекции (List, Set, Map):

    • List<WebElement> — для работы с группой элементов на странице (например, проверка сортировки таблицы).
    • Map<String, String> — для хранения тестовых данных: ключ — имя поля, значение — данные для ввода. Это удобно для параметризованных тестов.
    • Set<String> — для проверки уникальности. Например, я собирал ID всех товаров в каталоге, чтобы убедиться в отсутствии дубликатов.
  • Массивы и простые типы: для базовых проверок и параметров.

Практический пример из UI-теста:

// Проверка, что фильтр "Price (high to low)" работает корректно
@Test
public void sortPriceHighToLowTest() {
    inventoryPage.selectSortOption("Price (high to low)");
    List<WebElement> priceElements = inventoryPage.getAllItemPrices();
    List<Double> actualPrices = priceElements.stream()
            .map(e -> e.getText().replace("$", ""))
            .map(Double::parseDouble)
            .collect(Collectors.toList());
    List<Double> sortedPrices = new ArrayList<>(actualPrices);
    sortedPrices.sort(Collections.reverseOrder());
    Assertions.assertEquals(sortedPrices, actualPrices, "Цены отсортированы не по убыванию");
}

Здесь List используется для сбора данных с UI, их преобразования и последующего сравнения с ожидаемым отсортированным списком. Выбор List обусловлен необходимостью сохранить порядок элементов для корректного сравнения.