Создание юнит‑теста для метода вставки в односвязный список

Тест должен проверять не только true от add, но и сохранение всех значений после второй и третьей вставки. Исходная реализация может разыменовать null или перезаписать последний элемент.

Короткий ответ

Что ответить на собеседовании

Тест должен проверять не только true от add, но и сохранение всех значений после второй и третьей вставки. Исходная реализация может разыменовать null или перезаписать последний элемент.

Подробный разбор

Ответ с пояснениями

Условие

Напишите unit‑тест, который проверит правильность работы функции add, отвечающей за добавление элементов в простую односвязную структуру данных.

@Override
public boolean add(T item) {
    if (item == null) {
        return false;
    }

    if (data == null) {
        data = item;
        return true;
    }

    // 0 -> 1 -> 2 // next = 1
    // 0 -> 1 // add 2
    ListNode<T> node = next;

    while (node.next != null) {
        node = node.next;
    }

    node.data = item;

    return true;
}

Тест должен убедиться, что при передаче корректного значения элемент появляется в конце списка, а при передаче null метод возвращает false и структура списка остаётся неизменной.

Ответ

Тест должен проверять не только true от add, но и сохранение всех значений после второй и третьей вставки. Исходная реализация может разыменовать null или перезаписать последний элемент.

Пример JUnit 5 при наличии конструктора ListNode<>() и get(int), возвращающего Optional:

@Test
void appendsAndRejectsNull() {
    ListNode<String> list = new ListNode<>();
    assertFalse(list.add(null));
    assertTrue(list.get(0).isEmpty());
    assertTrue(list.add("a"));
    assertTrue(list.add("b"));
    assertTrue(list.add("c"));
    assertFalse(list.add(null));
    assertEquals(Optional.of("a"), list.get(0));
    assertEquals(Optional.of("b"), list.get(1));
    assertEquals(Optional.of("c"), list.get(2));
    assertTrue(list.get(3).isEmpty());
}

API чтения в условии не указан: get нужно заменить реальным способом обхода. Исправление add должно создавать новый узел и присоединять его через next, а не менять data уже занятого последнего узла.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее