很多时候,在编写测试时,我必须检查两个集合是否具有相同的内容,有时甚至检查它们的顺序是否相同。所以我无休止地做同样的事情:

assertEquals(collection1.size(), collection2.size());

for (ItemType item : collection1){
 if (!collection2.contains(item)) fail(); //This depends on the collection
}

//some more code is required to test ordering


您是否知道使用某些标准库结束这种折磨的好方法?

最佳答案

最好使用equals()方法,因为如果使用containsAll,则对于两个具有相同元素的列表,它们可以相等,尽管元素的顺序不同。因此,使用containsAll并不是比较List的好方法
这是一个演示

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;

    public class TwoButtons {


        public static void main(String[] args){
            Collection<Integer> c1 = new ArrayList<>(Arrays.asList(1,2,3));
            Collection<Integer> c2 = new ArrayList<>(Arrays.asList(3,2,1));

            System.out.println("equals " + c1.equals(c2));
            System.out.println("containsAll " + c1.containsAll(c2));
        }
    }


输出

equals false
containsAll true

09-25 17:23