首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两种TreeMaps与JUnit的比较

两种TreeMaps与JUnit的比较
EN

Stack Overflow用户
提问于 2018-04-11 12:57:21
回答 2查看 645关注 0票数 2

尝试用以下代码测试两个TreeMap是相同的:

代码语言:javascript
复制
public class StreamTest {

  private Stream stream;
  private Map<String, AtomicInteger> map = new HashMap<>();

  @Before
  public void setup() {
    stream = new Stream();
    map.put("this", new AtomicInteger(1));
    map.put("is", new AtomicInteger(1));
    map.put("an", new AtomicInteger(1));
    map.put("just", new AtomicInteger(1));
    map.put("example", new AtomicInteger(1));
    map.put("file", new AtomicInteger(1));
    map.put("for", new AtomicInteger(1));
    map.get("this").incrementAndGet();
    map.put("project", new AtomicInteger(1));
  }

  @Test
  public void lineToWordsToMapTest() {
    stream.getLines("testSampleFile");
    Map<String, AtomicInteger> sortedmap = new TreeMap<>(stream.getMap());
    Map<String, AtomicInteger> treemap = new TreeMap<>(map);  // Maps must be sorted in order to pass test
    Assert.assertEquals(treemap, sortedmap);
  }

}

这是令人费解的错误信息:

代码语言:javascript
复制
java.lang.AssertionError: expected: java.util.TreeMap<{an=1, example=1, file=1, for=1, is=1, just=1, project=1, this=2}> but was: java.util.TreeMap<{an=1, example=1, file=1, for=1, is=1, just=1, project=1, this=2}>
Expected :java.util.TreeMap<{an=1, example=1, file=1, for=1, is=1, just=1, project=1, this=2}> 
Actual   :java.util.TreeMap<{an=1, example=1, file=1, for=1, is=1, just=1, project=1, this=2}>

因此,使用JUnit 4.12,对象看起来完全相同。任何洞察力都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-11 13:03:37

这是因为AtomicInteger不覆盖equals(),也不能成功地与具有相同值的其他AtomicInteger实例进行比较。您需要更改映射值类型或为AtomicInteger编写自己的断言。

为了简化:

代码语言:javascript
复制
Assert.assertEquals(new AtomicInteger(1), new AtomicInteger(1));

在以下方面的成果:

代码语言:javascript
复制
java.lang.AssertionError: expected: java.util.concurrent.atomic.AtomicInteger<1> but was: java.util.concurrent.atomic.AtomicInteger<1>
Expected :java.util.concurrent.atomic.AtomicInteger<1> 
Actual   :java.util.concurrent.atomic.AtomicInteger<1>
票数 2
EN

Stack Overflow用户

发布于 2018-04-11 13:21:00

您有它的get()方法

获取当前值。

返回:当前值

at::get保证,当您调用它时,您将得到调用时可用的最新值。以普通int为例,您将无法得到的保证。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49775789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档