我有:
List<SlaveEntityDTO> result = Jsoner.JsonToSlaveEntityDTO(json);
List<SlaveEntityDTO> result1 = entitiesDTOList;
result和result1的字段具有相同的值:
运行时,Assert.assertEquals(result, result1);
我收到以下消息:
java.lang.AssertionError:
Expected :[core.dto.SlaveEntityDTO@6be46e8f, core.dto.SlaveEntityDTO@3567135c]
Actual :[core.dto.SlaveEntityDTO@327471b5, core.dto.SlaveEntityDTO@4157f54e]
那么,如何比较result和result1中的字段的值,而不是比较某个对象是否是该对象?
SlaveEntityDTO是这样的:
public class SlaveEntityDTO extends BaseEntityDTO<SlaveEntity> {
private String ip;
private String macAddress;
private String status;
private List<PositionEntity> positions;
@Override
public SlaveEntity convertToEntity() {
return new ModelMapper().map(this, SlaveEntity.class);
}
}
而BaseEntityDTO是这样的:
public abstract class BaseEntityDTO<T> implements Serializable{
private long id;
public abstract T convertToEntity();
}
您的测试看起来不错。该List
接口定义其的行为,equals
调试器将显示ArrayList
正在使用的行为。ArrayList
是个好人,因此我们可以假设其equals的实现是合法的。
因此,我们可以得出结论,您的SlaveEntityDTO
类要么没有被覆盖Object#equals(Object)
,要么以您没有考虑的方式进行覆盖(这可能意味着它在错误地实现了它)。
您可以通过覆盖equals
中来解决此问题BaseEntityDTO
。这将为equals
每个子类提供基本行为。
@Override
public boolean equals(Object o) {
if (this == o) return true; // literally the same object.
if (o == null || getClass() != o.getClass()) return false; // Not correct type.
BaseEntityDTO that = (BaseEntityDTO) o;
return this.id == null ? that.id == null : this.id.equals(that.id);
}
并且不要忘记:hashCode()
必须匹配equals
!的实现!
@Override
public int hashCode() {
return id == null ? 0 : id.hashCode();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句