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)возвращает объект, который не совпадает с ожидаемым по содержимому или типам.