在我的单元测试课中,我有两个列表。一个是expectedValue
,另一个是returnedType
。
我在做
Collections.sort(expected);
Collections.sort(returned);
但是如何根据其中一个元素的值类型比较两个列表?例如,我在列表中都有元素sortOrder
,并且它具有来自1,2 or 3
的值,所以我如何比较或说出像assertEqual(expected, returned) for both the list
这样的内容并确保两个列表都具有相同的元素并具有相同的sortOrder含义元素也是正确的排序格式吗?
注意:我不应该使用任何外部库来执行此操作。
更新
我的回归和预期清单的示例:
excepted List = [Code: ANALYST, SortOrder: 2, Code: STREET, SortOrder: 1]
和
returned List = [Code: STREET, SortOrder: 1, Code: ANALYST, SortOrder: 2]
所以在这里非常基本的问题是如何根据sortOrder
值在我们的示例中根据其元素值对列表进行排序,因此我们的预期应该是
excepted List = [Code: STREET, SortOrder: 1, Code: ANALYST, SortOrder: 2]
答案 0 :(得分:2)
使用equals()
。
答案 1 :(得分:2)
查看Hamcrest - 用于构建测试表达式的匹配器库。
它提供了许多方法来比较集合(和其他难以比较的类)和特殊的匹配器,它们告诉你为什么集合在抛出AssertionErrors时不匹配
答案 2 :(得分:2)
要扩展Bohemian的答案(+1),Hamcrest是一个非常好的方法。这是一个例子:
assertThat(myListOfIntegers, contains(1, 2, 3));
Matchers.contains
断言列表元素是正确的类型,正确的数量,并且顺序正确。因此,在上述断言中,我期望myListOfIntegers
成为确切的列表:[1, 2, 3]
。
答案 3 :(得分:1)
确保列表中的对象覆盖equals和hashcode方法,但除此之外,您可以根据java.util.List的合同直接比较列表,如果列表包含相同的对象,则表明它们相等。同样的订单。
http://download.oracle.com/javase/6/docs/api/java/util/List.html#equals(java.lang.Object)
答案 4 :(得分:0)
编辑:
最好的办法是
assertEquals(expected, returned);
因为AbstractList使用成对比较实现等于。 如果您不确定,您收到的列表是否从AbstractList继承,您可以随时执行
assertEquals(new ArrayList(expected), new ArrayList(returned));
我留下其余的答案用于纪录片目的(并且不掩饰我可耻的无知)
您是否要声明列表的顺序也正确?
public static void assertEquals(List expected, List returned)
{
assertEquals(expected.size(), returned.size());
if(!expected.containsAll(returned))
{
fail();
}
for(int i = 0; i < expected.size(); i++)
{
assertEquals(expected.get(i),returned.get(i));
}
}
答案 5 :(得分:0)
尝试使用此: CollectionUtils.isEqualCollection(期望,返回);