在进行一些JUnit修复期间,我发现了以下代码行:
Assert.assertNull(lAllEntryById.put(lEntry.getId(), lEntry));
如果我检查操作
lAllEntryById.put(lEntry.getId(), lEntry)
,结果始终为null,但assertNull
仍然失败。当我将代码更改为:
Entry lEntry = lAllEntryById.put(lEntry.getId(), lEntry);
Assert.assertNull(lEntry);
一切正常。
我有点困惑。您能告诉我为什么上面的代码行得到两个不同的结果吗?
多谢...
最佳答案
这些行在断言中具有相同的结果:
Assert.assertNull(lAllEntryById.put(lEntry.getId(), lEntry));
和这个
Entry lEntry = lAllEntryById.put(lEntry.getId(), lEntry);
Assert.assertNull(lEntry);
该问题可能是由于:
在添加新元素之前忘记清除表(然后
put
返回旧对象)您可以依次执行1条语句
为了避免这种情况,我建议进行以下实验:
lAllEntryById = new HashTable<EntryId, Entry>(); // ensure nothing effects it
Assert.assertNull(lAllEntryById.put(lEntry.getId(), lEntry));