-2

在我的单元测试方法中,

我有两个清单。一个是expectedValueList,另一个是actualvalueList

expectedValueList={a=1,b=2,c=3,d=4}

actualvalueList={d=4,b=2,c=3,a=1}

我这样做只比较一个元素

CollectionAssert.AreEqual(expectedValueList.Select(x => x.a).ToList() ,actualvalueList.Select(x => x.a).ToList())

如何比较剩余元素?

4

3 回答 3

1

如果它们已经直接有序,您可以使用SequenceEqual

expectedValueList.SequenceEqual(actualvalueList);

如果它们不按顺序排列,那么您也可以在使用序列相等之前应用排序

expectedValueList.OrderBy(x => x).SequenceEqual(actualvalueList.OrderBy(y => y));

例子

List<int> l1 = new List<int> { 1, 2, 3, 4 };
List<int> l2 = new List<int> { 3, 1, 2, 4 };

if (l1.OrderBy(x => x).SequenceEqual(l2.OrderBy(y => y)))
{
     Console.WriteLine("List are equal"); // will write this
}

if (l1.SequenceEqual(l2))
{
     Console.WriteLine("List are equal"); 
}
else
{    
     Console.WriteLine("List are not equal"); // will write this    
}
于 2013-08-23T05:59:08.903 回答
0

正如您在评论中提到的,我期待它是 aList<int>而不是键值对。尝试这样的事情:

Assert.AreEqual(actualvalueList.Count(), expectedValueList.Count());
for(int i=0;i<actualvalueList.Count();i++)
{
   Assert.AreEqual(actualvalueList[i], expectedValueList[i]);
}

或者

CollectionAssert.AreEqual(expectedValueList, actualvalueList);

编辑

如果您不想比较一个值,请从列表中删除:

actualvalueList.Remove(actualvalueList.Select(x => x.d).FirstOrDefault())
于 2013-08-23T05:57:02.970 回答
0

只需创建返回所需字段的函数

Func<TItem, object> itemSelector = (item) => new { A = item.a };

并使用 SequenceEqual 进行比较

expectedValueList.Select(itemSelector).SequenceEqual(actualvalueList.Select(itemSelector )
于 2021-11-08T10:44:26.920 回答