2

在一些 JUnit 修复过程中,我发现了这行代码:

Assert.assertNull(lAllEntryById.put(lEntry.getId(), lEntry));

如果我检查操作lAllEntryById.put(lEntry.getId(), lEntry),结果始终为空,但assertNull仍然失败。

当我将代码更改为:

 Entry lEntry = lAllEntryById.put(lEntry.getId(), lEntry);
 Assert.assertNull(lEntry);

一切正常。

我有点困惑。你能告诉我为什么我用上面的代码行得到两个不同的结果吗?

多谢...

4

2 回答 2

2

这些行在断言中具有相同的结果:

Assert.assertNull(lAllEntryById.put(lEntry.getId(), lEntry));

还有这个

Entry lEntry = lAllEntryById.put(lEntry.getId(), lEntry);
Assert.assertNull(lEntry);

问题可能是由以下原因引起的:

  1. 在添加新元素之前忘记清除表格(然后put返回旧对象)

  2. 您可以依次执行一条语句

为避免这种情况,我建议进行此实验:

lAllEntryById = new HashTable<EntryId, Entry>(); // ensure nothing effects it
Assert.assertNull(lAllEntryById.put(lEntry.getId(), lEntry));
于 2013-08-09T09:49:02.977 回答
0

http://docs.oracle.com/javase/6/docs/api/java/util/Hashtable.html#put%28K,%20V%29

返回:此哈希表中指定键的前一个值,如果没有,则返回 null

验证您之前没有在哈希图中插入具有相同键的值。

试着做 :

Assert.assertFalse(lAllEntryById.contains(lEntry.getId());

在你的断言之前。

于 2013-08-09T09:47:50.473 回答