已排序 ArrayList 的 JUnit 测试

JUnit Test For Sorted ArrayList

所以,我有方法:

public List<Map.Entry<String, Integer>> sortMap(HashMap<String, Integer> map) {
        List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
        list.sort((o1, o2) -> {
            int value = o2.getValue().compareTo(o1.getValue());
            if (value != 0) {
                return value;
            }
            return o1.getKey().compareTo(o2.getKey());
        });
        return list;
    }

我需要对他进行 JUnit 测试。实际上,我开始编写它,但我不知道如何正确完成它

       @Test
        public void shouldReturnCurrentList() {
            Object object = new Object();
                List<Map.Entry<String, Integer>> testList = new ArrayList<>(testMap.entrySet());
                testMap.put("One", 1);
                testMap.put("Two", 2);
                testMap.put("Three", 3);
                testMap.put("Four", 4);
        
                object.sortMap(testMap); 
}

创建地图。在本例中,我添加了一个具有重复值的元素。

  Map<String,Integer> map = new HashMap<>();
  map.put("One", 1);
  map.put("Two", 2);
  map.put("Three", 3);
  map.put("Four", 4);
  map.put("AnotherFour", 4);

现在调用方法

List<Map.Entry<String, Integer>> actual = SUT.sortMap(map);

现在根据我们期望的 Map 处理方式测试顺序。对于 out map,键的顺序应该是“One”、“Two”、“Three”、“AnotherFour”、“Four”,值的顺序应该是 1、2、3、4、4。

Assert.assertEquals("One", actual.get(0).getKey());
Assert.assertEquals(1, actual.get(0).getValue()); 
Assert.assertEquals("Two", actual.get(1).getKey());
Assert.assertEquals(2, actual.get(1).getValue()); 
Assert.assertEquals("Three", actual.get(2).getKey());
Assert.assertEquals(3, actual.get(2).getValue()); 
Assert.assertEquals("AnotherFour", actual.get(3).getKey());
Assert.assertEquals(4, actual.get(3).getValue()); 
Assert.assertEquals("Four", actual.get(4).getKey());
Assert.assertEquals(4, actual.get(4).getValue()); 

地图有更方便的方式

assertThat(testList)
    .contains(Assertions.entry("one", 1), Assertions.entry("two", 2));