java - 对 HashTable 的assertNull 行为感到困惑

标签 java junit

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

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

如果我检查操作lAllEntryById.put(lEntry.getId(), lEntry),结果始终为空,但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);

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

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

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

为了避免这种情况,我建议这个实验:

lAllEntryById = new HashTable<EntryId, Entry>(); // ensure nothing effects it
Assert.assertNull(lAllEntryById.put(lEntry.getId(), lEntry));

关于java - 对 HashTable 的assertNull 行为感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18143855/

相关文章:

java - 使用 Maven 测试加载 log4j.xml

java - 相当于 JUnit5 的 @RunWith(JUnitPlatform.class)

java - 使用 lines() stream Lambda 但需要关闭

java - 将 jar 文件更新到 selenium 3.0 后无法选择下拉选项

java - Spring Boot、安全登录无限查询

java - 确保在使用 Java 在 Windows 上生成 XML 时使用 Unix 样式的行结尾

java - 我的程序不会从另一个类更新 TextView ,它每次都会退出,我不知道为什么?

Java 测试扫描仪与假用户输入

java - 如何为一个类添加额外的 JUnit 测试?

java - @Before 和@BeforeClass 有什么意义?