簡體   English   中英

將兩個TreeMap與JUnit比較

[英]Comparing two TreeMaps with JUnit

嘗試使用以下代碼測試兩個TreeMap是否相同:

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);
  }

}

這是令人費解的錯誤消息:

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時完全相同。 任何見識將不勝感激。

這是因為AtomicInteger不會覆蓋equals() ,並且無法與具有相同值的AtomicInteger的其他實例成功進行比較。 您要么需要更改映射值類型,要么為AtomicInteger編寫自己的斷言。

為了簡化:

Assert.assertEquals(new AtomicInteger(1), new AtomicInteger(1));

結果是:

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>

你有它的get()方法

獲取當前值。

返回:當前值

AtomicInteger :: get保證的是,當您調用它時,您將在調用時獲得可用的最新值。 例如,沒有普通int的擔保。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM