Добро пожаловать на SO.Вместо того, чтобы найти проблему для вас, я предложу, как вы могли бы решить ее самостоятельно.
Ваш тест пытается проверить слишком много за один раз.Чтобы ваш тест работал, все методы должны работать.Лучше протестировать каждый метод по отдельности (насколько это возможно), а затем перейти к тестированию более сложных сценариев.
Поэтому постарайтесь сначала запустить этот тест:
DLL list = new DLL();
assertTrue(list.isEmpty());
Затем
DLL list = new DLL();
list.push(5);
assertTrue(list.contains(5));
Довольно скоро вы обнаружите, что вам нужен метод, чтобы получить список в другом формате для тестирования.Это довольно типично.
DLL list = new DLL();
list.push(5);
list.push(7);
list.push(5);
assertEquals(list.asList(), List.of(5, 7, 5));
DLL list = new DLL();
list.push(5);
list.push(7);
list.reverse();
assertEquals(list.asList(), List.of(7, 5));
И т. Д.
Таким образом, вы можете проверить, что каждый метод работает с базовыми значениями, прежде чем двигаться дальше.
Теперь пара дизайнерских указателей: использование фиктивного узла для хранения головы и хвоста необычно.Было бы легко испортить значения (как вы сделали).Лучше хранить голову и хвост как отдельные переменные, которые равны null
(или, что лучше, Optional.empty
), если список пуст и указывает на один и тот же узел для одного элемента.