Почему assertEquals fails?
Я сравниваю 2 объекта (элементы списка), они одинаковые по своим полям, но тест все равно проваливается. Но если я не буду создавать новый список и не буду создавать в нем этот элемент, а просто буду сравнивать уже с существующим объектом из списка cars, то тогда тест проходит успешно. Почему? Ощущение, что он сравнивает не поля, а ссылки в памяти. Если нужен код, я скину.
Ответы (1 шт):
Указанные Вами объекты не равны, т.к. являются разными экземплярами и по-умолчанию будут сравниваться по ссылке. Вам необходимо в классе Car переопределить метод equals() таким образом, чтобы проверка производилась по необходимым Вам полям. Подробнее почитать про метод equals() можно в документации по классу Object:
package com.somepackage;
import java.util.Objects;
public class Car {
enum BodyType { CROSSOVER_SUV }
private String name;
private Double price;
private Integer fuelConsumption;
private Integer maxSpeed;
private BodyType bodyType;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Car car = (Car) o;
if (!Objects.equals(name, car.name)) return false;
if (!Objects.equals(price, car.price)) return false;
if (!Objects.equals(fuelConsumption, car.fuelConsumption)) return false;
if (!Objects.equals(maxSpeed, car.maxSpeed)) return false;
return bodyType == car.bodyType;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + (price != null ? price.hashCode() : 0);
result = 31 * result + (fuelConsumption != null ? fuelConsumption.hashCode() : 0);
result = 31 * result + (maxSpeed != null ? maxSpeed.hashCode() : 0);
result = 31 * result + (bodyType != null ? bodyType.hashCode() : 0);
return result;
}
}
