JUnit比较两个实体列表

克里斯蒂安

我有:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章