抛出了意外的Java AssertionError:在重新实例化静态对象后期望为null

时间:2015-12-07 11:22:38

标签: java junit assertions

我正在为excel报表阅读器方法编写一个简单的JUnit测试,这个特定的测试是测试报表中现有引擎对象到行索引的映射。 对于这个特定的测试,当我真的希望测试返回null时,我得到一个结果。

全局变量:

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

    engineOnRow7 = new Engine(a,b,c)
    expected.put(engineOnRow7, 7);
    Integer row = actual.get(engineOnRow7);
    assertNotNull(row);
    assertTrue((int)row == 7);
    
  2. 然后我使用相同的参数重新实例化对象,并在地图上执行另一个get操作,期望结果为null(因为它是一个“新”对象):

    engineOnRow7 = new Engine(a,b,c)
    row = actual.get(engineOnRow7);
    assertNull(row);
    
  3. 但是,上面提到的AssertionError表示row的实际值仍为7。

    我最初的想法是地图仍在使用旧的“engineOnRow7”引用,因为它是一个静态对象,这就是为什么它找到7的结果而不是null。但是我不完全确定,所以任何帮助都会非常感激。

    感谢。

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

1 个答案:

答案 0 :(得分:0)

actual HashMapexpected吗? 如果是,那么密钥将取决于Engine类的hashCodeequals方法。 我想原始的Engine对象都具有相同的哈希码并且是相同的。因此,它们都会指向HashMap中的相同值。