尝试用以下代码测试两个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,对象看起来完全相同。任何洞察力都将不胜感激。
发布于 2018-04-11 13:03:37
这是因为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>发布于 2018-04-11 13:21:00
您有它的get()方法
获取当前值。
返回:当前值
at::get保证,当您调用它时,您将得到调用时可用的最新值。以普通int为例,您将无法得到的保证。
https://stackoverflow.com/questions/49775789
复制相似问题