← Назад к вопросам
Какие будешь писать юнит-тесты при добавлении элемента в 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%+