使用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。怎么做?
答案 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));
}
}
}