[英]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.