-6

在我的单元测试方法中创建了两个对象列表,

即一个是那个expectedValueList,另一个是actualvalueList

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

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

我比较

CollectionAssert.AreEqual(expectedValueList, actualvalueList);

我需要"c" property从两个列表中排除,然后我想比较两个列表是否相等?

4

2 回答 2

1

假设两个列表都List<CustomType>whereCustomType有两个属性。现在您需要一种比较两个列表但忽略一个值的方法。

如果订单很重要,我会使用Enumerable.SequenceEqual

var expectedWithoutC = expectedValueList.Where(t => t.Name != "c");
var actualWithoutC = actualvalueList.Where(t => t.Name != "c");
bool bothEqual = expectedWithoutC.SequenceEqual(actualWithoutC); 

请注意,如果我的假设是正确的,您需要覆盖Equals(and )。GetHashCode否则SequenceEqual只会比较参考相等。

于 2013-08-23T08:48:42.973 回答
0

假设expectedValueList是一个Dictionary<string, int>

var expectedValueList = new SortedDictionary<string, int> { { "a", 1 }, { "b", 2 }, { "c", 3 }, { "d", 4 } };
expectedValueList.Remove("c");

var actualValueList = new SortedDictionary<string, int> { { "d", 4 }, { "b", 2 }, { "c", 3 }, { "a", 1 } };
actualValueList.Remove("c");

// Will return false if the order is different.
CollectionAssert.AreEqual(expectedValueList, actualvalueList);
于 2013-08-23T08:42:20.030 回答