2017-02-01 9 views
1

を使用してMicrosoft.VisualStudio.TestTools.UnitTesting;C#の比較リスト<T>

私は辞書や機能を取得するユニバーサル試験方法を、したいし、[値と機能の間の各辞書エントリの平等をチェックする(キー):

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> 

それはもちろん、仕事をdoesntの。だから、私は必要以上に見つけた

CollectionAssert.AreEqual 

このような場合は、 しかし、今私は、私の価値はSystem.Collections.ICollectionだと言わざるを得ない。これを行う方法?

+0

私は知っています。しかし、 "TValueからSystem.Collections.ICollectionに変換できません"というエラーが表示されます。私は何とかTValueがSystem.Collections.ICollectionになることを何とか言わなければならないと思います。 – dmitry

答えて

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)); 
     } 
    } 
} 
+1

これはうまくいきます! ICollectionの代わりにSystem.Collections.ICollectionを指定する必要があります。 – dmitry

+0

よく知っておいてください:)テストクラスに 'using System.Collections;'ステートメントを追加することもできます。 – dana