Java - 哈希码 - 等于

Java - HashCode - Equals

我在 Java 中遇到单元测试问题。

我把我的代码和我的错误放在这里。在互联网上,我发现这是哈希码的问题。我需要重新创建它们,但我不知道为什么以及如何。

我的方法:

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

单元格控制器文件:

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 和 equals 或使用比较器,如果你没有这样做,那么你得到的消息是完全正常的。

在这里设置 groupModel 并修改 groupModel。

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

在您的测试中,您将刚创建的 groupModel 与从 cellModel.getGroupModel() 获得的 groupModel 进行比较,但那个已经 修改 ,所以两个对象不同

    assertEquals(groupModel, cellModel.getGroupModel());