簡體   English   中英

Java-HashCode-等於

[英]Java - HashCode - Equals

我在Java中遇到單元測試問題。

我把代碼和錯誤放在這里。 在互聯網上,我發現這是哈希碼的問題。 我需要重新創建它們,但我不知道為什么以及如何。

我的方法:

public void setGroupModel(GroupModel groupModel) {
    this.groupModel = groupModel;
    this.groupModel.add(this);
}

cellControler文件:

public class CellController {

    public void click(CellModel cellModel, HexModel hexModel)
    {
        GroupModel groupModel = new GroupModel();
        cellModel.setGroupModel(groupModel);
        hexModel.getGridContentModel().getArrayListGroupModel().add(groupModel);
    }
}

我的單元測試:

public class CellControllerTest {
    protected CellController cellController;
    @Before
    public void setUp() throws Exception {
        cellController = new CellController();
    }

    @After
    public void tearDown() throws Exception{
    }

    @Test
    public void testClick() throws Exception{
        GroupModel groupModel = new GroupModel();
        CellModel cellModel = new CellModel();
        HexModel hexModel = new HexModel(); // hexModel has an attribute : gridContentModel
        cellController.click(cellModel, hexModel);
        assertEquals(groupModel, cellModel.getGroupModel());
    }
}

我的錯誤

java.lang.AssertionError: expected:<model.GroupModel@6d5380c2> but was:<model.GroupModel@45ff54e6>

我認為問題是: this.groupModel = groupModel;

我必須寫什么,為什么? :)

要進行比較比較容易,您需要重寫hashCode並等於或使用比較器,如果不這樣做,則收到的消息是完全正常的。

在這里,您可以設置groupModel 並修改groupModel。

public void setGroupModel(GroupModel groupModel) {
  this.groupModel = groupModel;
  this.groupModel.add(this); // the modification
}

在測試你比較groupModel剛創建你從獲得groupModel cellModel.getGroupModel()而是一個已被修改 ,所以兩個對象是不同的

    assertEquals(groupModel, cellModel.getGroupModel());

暫無
暫無

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

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