-2

私の単体テスト方法では、

私は2つのリストを持っています。1 つはexpectedValueListで、もう 1 つはactualvalueListです。

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

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

これを行うことで、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

List<int>コメントで述べたように、キーと値のペアではなくa を期待しています。このようなことを試してください:

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

また

CollectionAssert.AreEqual(expectedValueList, actualvalueList);

編集

1 つの値を比較したくない場合は、リストから削除します。

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 に答える