← Назад к вопросам

Какие будешь писать юнит-тесты при добавлении элемента в ArrayList

1.0 Junior🔥 141 комментариев
#Коллекции#Тестирование

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Какие будешь писать юнит-тесты при добавлении элемента в ArrayList

Расскажу о полном наборе юнит-тестов для методов добавления элемента в ArrayList.

1. Базовые тесты успешного добавления

class ArrayListAddElementTest {
    
    private ArrayList<String> list;
    
    @BeforeEach
    void setUp() {
        list = new ArrayList<>();
    }
    
    @Test
    @DisplayName("Добавить элемент в пустой список")
    void shouldAddElementToEmptyList() {
        boolean result = list.add("item1");
        
        assertTrue(result);
        assertEquals(1, list.size());
        assertEquals("item1", list.get(0));
    }
    
    @Test
    @DisplayName("Добавить несколько элементов")
    void shouldAddMultipleElements() {
        list.add("item1");
        list.add("item2");
        list.add("item3");
        
        assertEquals(3, list.size());
        assertEquals("item1", list.get(0));
        assertEquals("item2", list.get(1));
        assertEquals("item3", list.get(2));
    }
    
    @Test
    @DisplayName("Добавить null элемент")
    void shouldAddNullElement() {
        list.add("item1");
        boolean result = list.add(null);
        
        assertTrue(result);
        assertEquals(2, list.size());
        assertNull(list.get(1));
    }
    
    @Test
    @DisplayName("Добавить элемент по индексу")
    void shouldAddElementAtIndex() {
        list.add("item1");
        list.add("item3");
        list.add(1, "item2");
        
        assertEquals(3, list.size());
        assertEquals("item2", list.get(1));
    }
}

2. Граничные случаи (Edge Cases)

class ArrayListAddEdgeCasesTest {
    
    private ArrayList<String> list;
    
    @BeforeEach
    void setUp() {
        list = new ArrayList<>();
    }
    
    @Test
    void shouldThrowExceptionForNegativeIndex() {
        assertThrows(IndexOutOfBoundsException.class, () -> {
            list.add(-1, "item1");
        });
    }
    
    @Test
    void shouldThrowExceptionForIndexOutOfBounds() {
        list.add("item1");
        assertThrows(IndexOutOfBoundsException.class, () -> {
            list.add(5, "item2");
        });
    }
    
    @Test
    void shouldResizeWhenCapacityExceeded() {
        for (int i = 0; i < 20; i++) {
            list.add("item" + i);
        }
        
        assertEquals(20, list.size());
        for (int i = 0; i < 20; i++) {
            assertEquals("item" + i, list.get(i));
        }
    }
}

3. Параметризованные тесты

class ArrayListAddParametrizedTest {
    
    private ArrayList<String> list;
    
    @BeforeEach
    void setUp() {
        list = new ArrayList<>();
    }
    
    @ParameterizedTest
    @ValueSource(strings = {"a", "b", "c", "test"})
    void shouldAddDifferentElements(String element) {
        list.add(element);
        assertEquals(element, list.get(0));
    }
}

4. Тесты производительности

class ArrayListAddPerformanceTest {
    
    @Test
    @DisplayName("Добавить 1 млн элементов за < 1 секунду")
    void shouldAddMillionElementsQuickly() {
        ArrayList<String> list = new ArrayList<>();
        long startTime = System.currentTimeMillis();
        
        for (int i = 0; i < 1_000_000; i++) {
            list.add("item" + i);
        }
        
        long duration = System.currentTimeMillis() - startTime;
        
        assertEquals(1_000_000, list.size());
        assertTrue(duration < 1000);
    }
}

5. Интеграционные тесты

class ArrayListAddIntegrationTest {
    
    @Test
    void shouldWorkWithIterator() {
        ArrayList<String> list = new ArrayList<>();
        list.add("item1");
        list.add("item2");
        
        Iterator<String> iterator = list.iterator();
        assertTrue(iterator.hasNext());
        assertEquals("item1", iterator.next());
    }
    
    @Test
    void shouldAddThenRemove() {
        ArrayList<String> list = new ArrayList<>();
        list.add("item1");
        list.add("item2");
        list.remove(0);
        
        assertEquals(1, list.size());
        assertEquals("item2", list.get(0));
    }
}

Итоговый чеклист

Успех:

  • Добавить в пустой список
  • Добавить несколько элементов
  • Добавить null
  • Добавить по индексу

Граничные случаи:

  • Индекс < 0 (исключение)
  • Индекс > size (исключение)
  • Resize при переполнении

Производительность:

  • 1M элементов быстро
  • Add в конец vs add в начало

Интеграция:

  • Iterator работает
  • Удаление после добавления
  • Очистка после добавления

Покрытие: 90%+