Найти и исправить проблему в тесте сравнения DTO

76. Найти и исправить проблему в тесте сравнения DTO

Условие задачи:
📌 Дан record MyDto и тест, который создаёт объект, сохраняет его, затем читает обратно и сравнивает через assertThat(actual, equalTo(myDto)).

Нужно найти проблему в коде и исправить её.

Код:

public record MyDto(String name, String description, List<Integer> attrs) {}

@Test
void testDto() {
    var myDto = new MyDto("name", "desc", List.of(new Integer(1), new Integer(2), new Integer(3)));

    var id = create(myDto);
    var actual = get(id);

    assertThat(actual, equalTo(myDto));
}

Спойлеры к решению

Подсказки
💡 record сравнивает поля по значению через equals().
💡 new Integer(...) здесь лишний и устаревший.
💡 Минимальное исправление — заменить список на List.of(1, 2, 3).
💡 Если тест всё равно падает, значит проблема уже в том, что возвращает get(id).

Решение
public record MyDto(String name, String description, List<Integer> attrs) {}

@Test
void testDto() {
    var myDto = new MyDto("name", "desc", List.of(1, 2, 3));

    var id = create(myDto);
    var actual = get(id);

    assertThat(actual, equalTo(myDto));
}

Здесь лишнее использование new Integer(...).
Лучше писать List.of(1, 2, 3).
Если тест всё равно падает, тогда проблема не в record, а в том, что get(id) возвращает объект, который не совпадает с ожидаемым по содержимому или типам.