抛出意外的 Java AssertionError:在静态 object 的 re-instantiation 之后期望为 null

Unexpected Java AssertionError thrown: expecting null after re-instantiation of a static object

我正在为 excel 报告 reader 方法编写一个简单的 JUnit 测试,这个特定的方法正在测试现有引擎 object 到报告中行索引的映射. 对于这个特定的测试,当我实际期望测试为 return null.

时,我得到了一个结果

全局变量:

    private static Engine engineOnRow7;
    Map<Engine, Integer> actual= new HashMap<Engine, Integer>();
  1. 对于我的第一个断言,我创建了一个带有一些参数的新 Engine object 并将其放入 HashMap 中,所有断言都按预期通过:

    engineOnRow7 = new Engine(a,b,c)
    expected.put(engineOnRow7, 7);
    Integer row = actual.get(engineOnRow7);
    assertNotNull(row);
    assertTrue((int)row == 7);
    
  2. 然后我 re-instantiate 使用相同参数的 object 并在地图上执行另一个 get 操作,期望结果为空(因为它是 "new" object):

    engineOnRow7 = new Engine(a,b,c)
    row = actual.get(engineOnRow7);
    assertNull(row);
    

然而,上面抛出一个 AssertionError 表示 row 的实际值仍然是 7。

我最初的想法是,该地图仍在使用旧的“engineOnRow7”引用,因为它是静态的 object,这就是它找到结果 7 而不是 null 的原因。但是我不完全确定,所以任何帮助将不胜感激。

谢谢。

P.S。 这是我第一次出现堆栈溢出 post,我意识到问题标题非常模糊/我可能没有为我想要实现的目标提供足够的上下文,所以如果需要任何其他信息,请发表评论,我会尽力提供。

actualHashMapexpected 一样吗? 如果是这样,那么密钥将取决于 Engine class 的 hashCodeequals 方法。 我猜想原始对象和重新实例化的 Engine 对象都具有相同的哈希码并且是相等的。因此它们都将指向 HashMap.

中的相同值