抛出意外的 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>();
对于我的第一个断言,我创建了一个带有一些参数的新 Engine
object 并将其放入 HashMap 中,所有断言都按预期通过:
engineOnRow7 = new Engine(a,b,c)
expected.put(engineOnRow7, 7);
Integer row = actual.get(engineOnRow7);
assertNotNull(row);
assertTrue((int)row == 7);
然后我 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,我意识到问题标题非常模糊/我可能没有为我想要实现的目标提供足够的上下文,所以如果需要任何其他信息,请发表评论,我会尽力提供。
actual
是 HashMap
和 expected
一样吗?
如果是这样,那么密钥将取决于 Engine
class 的 hashCode
和 equals
方法。
我猜想原始对象和重新实例化的 Engine
对象都具有相同的哈希码并且是相等的。因此它们都将指向 HashMap
.
中的相同值
我正在为 excel 报告 reader 方法编写一个简单的 JUnit 测试,这个特定的方法正在测试现有引擎 object 到报告中行索引的映射. 对于这个特定的测试,当我实际期望测试为 return null.
时,我得到了一个结果全局变量:
private static Engine engineOnRow7;
Map<Engine, Integer> actual= new HashMap<Engine, Integer>();
对于我的第一个断言,我创建了一个带有一些参数的新
Engine
object 并将其放入 HashMap 中,所有断言都按预期通过:engineOnRow7 = new Engine(a,b,c) expected.put(engineOnRow7, 7); Integer row = actual.get(engineOnRow7); assertNotNull(row); assertTrue((int)row == 7);
然后我 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,我意识到问题标题非常模糊/我可能没有为我想要实现的目标提供足够的上下文,所以如果需要任何其他信息,请发表评论,我会尽力提供。
actual
是 HashMap
和 expected
一样吗?
如果是这样,那么密钥将取决于 Engine
class 的 hashCode
和 equals
方法。
我猜想原始对象和重新实例化的 Engine
对象都具有相同的哈希码并且是相等的。因此它们都将指向 HashMap
.