在一些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);
一切正常。
我有点困惑。你能告诉我为什么我用上面的代码行得到两个不同的结果吗?
很多......
答案 0 :(得分:2)
这些行在断言中具有相同的结果:
Assert.assertNull(lAllEntryById.put(lEntry.getId(), lEntry));
这个
Entry lEntry = lAllEntryById.put(lEntry.getId(), lEntry);
Assert.assertNull(lEntry);
问题可能是由以下原因造成的:
在添加新元素之前忘记清除表格(然后put
返回旧对象)
您可以在另一个
为避免这种情况,我建议您进行此项实验:
lAllEntryById = new HashTable<EntryId, Entry>(); // ensure nothing effects it
Assert.assertNull(lAllEntryById.put(lEntry.getId(), lEntry));
答案 1 :(得分:0)
http://docs.oracle.com/javase/6/docs/api/java/util/Hashtable.html#put%28K,%20V%29
返回: 此哈希表中指定键的先前值,如果没有一个
,则返回null
确认您之前没有使用相同的密钥在哈希映射中插入值。
尝试:
Assert.assertFalse(lAllEntryById.contains(lEntry.getId());
在断言之前。