在进行一些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));

09-30 16:52