1

私はこのDistinctBy メソッドを拡張機能として使用していないという違いで使用しました。今、これを呼び出している別のメソッドの単体テストを書きたいので、戻り値を設定したいと思います。

「DistinctBy」メソッド

public IEnumerable<TSource> DistinctBy<TSource, TKey>(
      IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
    HashSet<TKey> seenKeys = new HashSet<TKey>();
    foreach (TSource element in source)
    {
        if (seenKeys.Add(keySelector(element)))
        {
            yield return element;
        }
    }
}

初期セットアップ 今のところ、私は次のようなものを持っています (私は Autofac の Moq、Automock 機能を使用しています):

List<Product> listProduct = new List<Product>{ product1, product2 };
mock.Mock<IHelpers>()
    .Setup(r => r.DistinctBy<List<BeautyBoutiqueArticle>, int>(It.IsAny<List<BeautyBoutiqueArticle>>(), It.IsAny<Func<List<BeautyBoutiqueArticle>, int>>()))
    .Returns(ieList)
    .Verifiable();

しかし、それは機能していません。次のようなエラーが表示されます。

最適なオーバーロードされたメソッドの一致.... に無効な引数が含まれているか、引数 1: 'System.Collections.Generic.List' から 'System.Collections.Generic.IEnumerable>' に変換できません。

4

1 に答える 1

1

まず第一に、インターフェースメソッドまたは仮想メソッドを moq できる必要がある moq が必要です。したがって、最初に行うことは、インターフェイスまたは仮想メソッドを実行することです。あなたの静的メソッドはモック可能ではありません

編集済み

メソッドが静的でない場合は、次の手順を実行します。検証可能である必要はありません

mock.Mock<Helpers>().Setup(r => r.DistinctBy(It.IsAny<IEnumerable<TSource>>(), It.IsAny<Func<TSource, TKey>>())).Returns(ieList);
于 2013-07-29T21:31:53.543 に答える