簡體   English   中英

JUnit比較兩個實體列表

[英]JUnit comparing two Lists of entities

我有:

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)要么以您沒有考慮的方式進行覆蓋(這可能意味着該類未正確實現)。

您可以通過重寫BaseEntityDTO equals來解決此問題。 這將為每個子類提供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();
}

當我運行Assert.assertEquals(result,result1); 我收到以下消息:

java.lang.AssertionError:預期的:[core.dto.SlaveEntityDTO @ 6be46e8f,core.dto.SlaveEntityDTO @ 3567135c]實際的:[core.dto.SlaveEntityDTO @ 327471b5,core.dto.SlaveEntityDTO @ 4157f54e]

如您所說,由於比較對象而不是兩個對象的內容,因此出現錯誤。

一種方法是將兩個JSON對象都轉換為字符串,然后比較兩個字符串,但請記住,JSON中的順序不固定,並且可能會導致結果對象的元素順序為{2, 1, 3}但是源對象按{1, 2, 3}的順序排列。

我認為您應該嘗試從源元素和結果元素中創建Set,然后根據它們的大小以及其中的元素比較Set,以斷言兩個對象是否相等。

您可以在此處閱讀這篇文章以了解有關JSON比較的更多信息:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM