我在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和从cellModel.getGroupModel()获得的groupModel进行了比较,但是其中一个已被修改,因此两个对象是不同的

    assertEquals(groupModel, cellModel.getGroupModel());

09-11 22:30