有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

引发junit意外的Java断言错误:重新实例化静态对象后应为null

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

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

我最初的想法是,映射仍然使用旧的'EngineRow7'引用,因为它是一个静态对象,这就是为什么它要查找结果7而不是null。但是我不能完全确定,所以任何帮助都将不胜感激

谢谢

附言。 这是我第一次发表堆栈溢出帖子,我意识到问题标题很模糊/我可能没有给出足够的上下文来说明我想要实现的目标,因此如果需要任何其他信息,请发表评论,我会尽力提供


共 (1) 个答案

  1. # 1 楼答案

    actualaHashMapexpected吗? 如果是这样,那么键将取决于Engine类的hashCodeequals方法。 我猜原始对象和重新实例化的Engine对象都具有相同的哈希代码,并且是相等的。因此,它们都将指向HashMap中的相同值