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

首先起订量要求您可以起订量接口方法或虚拟方法。所以首先要做的是做接口或虚拟方法。您的静态方法不可模拟

已编辑

如果您的方法不是静态的,请执行以下操作并且您不需要可验证

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