我在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());