Тест должен проверять не только 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 уже занятого последнего узла.