C#比较列表List <t>

时间:2017-02-01 19:46:02

标签: c# list unit-testing collections assert

使用Microsoft.VisualStudio.TestTools.UnitTesting;

我想要通用测试方法,它获取字典和函数,然后检查值和函数(Key)之间每个字典条目的相等性:

public void TestMethod<TKey, TValue>(Dictionary<TKey, TValue> dict, Func<TKey, TValue> func)
{
    foreach (var test in dict)
    {
         Assert.AreEqual(test.Value, func(test.Key));
    }
}

但是如果值(和函数的返回值)是

List<int>
当然,它不起作用。所以,我找到了比我需要的

CollectionAssert.AreEqual

对于这种情况。 但现在我不得不说,我的值是System.Collections.ICollection。怎么做?

1 个答案:

答案 0 :(得分:2)

您需要将值强制转换为ICollection,以便编译器不会抱怨。

public void TestMethod<TKey, TValue>(Dictionary<TKey, TValue> dict, Func<TKey, TValue> func)
{
    foreach (var test in dict)
    {
         if (test.Value is ICollection)
         {
              CollectionAssert.AreEqual((ICollection)test.Value, (ICollection)func(test.Key));
         }
         else
         {
              Assert.AreEqual(test.Value, func(test.Key));
         }
    }
}