我正在为excel报表阅读器方法编写一个简单的JUnit测试,这个特定的测试是测试报表中现有引擎对象到行索引的映射。 对于这个特定的测试,当我真的希望测试返回null时,我得到一个结果。
全局变量:
private static Engine engineOnRow7;
Map<Engine, Integer> actual= new HashMap<Engine, Integer>();
对于我的第一个断言,我创建了一个带有一些参数的新Engine
对象并将其放在HashMap中,所有断言都按预期传递:
engineOnRow7 = new Engine(a,b,c)
expected.put(engineOnRow7, 7);
Integer row = actual.get(engineOnRow7);
assertNotNull(row);
assertTrue((int)row == 7);
然后我使用相同的参数重新实例化对象,并在地图上执行另一个get
操作,期望结果为null(因为它是一个“新”对象):
engineOnRow7 = new Engine(a,b,c)
row = actual.get(engineOnRow7);
assertNull(row);
但是,上面提到的AssertionError
表示row
的实际值仍为7。
我最初的想法是地图仍在使用旧的“engineOnRow7”引用,因为它是一个静态对象,这就是为什么它找到7的结果而不是null。但是我不完全确定,所以任何帮助都会非常感激。
感谢。
P.S。 这是我的第一个堆栈溢出帖子,我意识到问题标题很模糊/我可能没有给出足够的上下文来实现我想要实现的目标,所以如果需要任何其他信息请评论,我会尽我所能提供。
答案 0 :(得分:0)
actual
HashMap
是expected
吗?
如果是,那么密钥将取决于Engine
类的hashCode
和equals
方法。
我想原始的Engine
对象都具有相同的哈希码并且是相同的。因此,它们都会指向HashMap
中的相同值。