尝试测试两个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,对象看起来完全一样。任何见解都将不胜感激。
答案 0 :(得分:2)
这是因为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>
答案 1 :(得分:1)
你有get()
方法
获取当前值。
返回: 当前值
AtomicInteger :: get保证,当您调用它时,您将获得呼叫时可用的最新值。例如,你没有普通int的保证。