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