最简单的方法来测试两个集合是否具有相同的内容?

时间:2014-09-19 17:21:47

标签: java testing

在编写测试时,我经常检查两个集合是否具有相同的内容,有时即使它们具有相同的顺序。所以我无休止地最终做同样的事情:

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

你知道用一些标准库结束这种折磨的好方法吗?

2 个答案:

答案 0 :(得分:4)

更好地使用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

答案 1 :(得分:1)

您可以将此作为条件

collection1.size()==collection2.size() && collection1.containsAll(collection2)

在这里,您要检查两个集合是否具有相同的大小以及具有所有元素。

根据joachim-isaksson的评论 你可以这样做,但效率不高。

collection1.containsAll(collection2) && collection2.containsAll(collection1)

你应该使用

ReflextionAsserter