0
我已經使用了this DistinctBy方法,但我沒有將它用作擴展。現在我想爲另一個調用這個方法的方法編寫單元測試,所以我想設置返回。如何使用Moq模擬/設置IEnumerable輸入參數的方法?
的 「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的起訂量,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」轉換爲 「系統.Collections.Generic.IEnumerable>'
比較遺憾的是,我的方法不是一成不變的。我更新了代碼。 此外,IHelpers類包含此方法的接口,所以,我嘲笑該方法的接口。 – DarkJoy
我已經試過類似的東西。該方法返回了幾個錯誤: ---錯誤\t 7無法根據用法推斷方法....的類型參數。嘗試明確指定類型參數。 ---錯誤\t 8類型或命名空間名稱「TSource」找不到(是否缺少using指令或程序集引用?)\t ---錯誤\t 10的類型或命名空間名稱TKEY的「無法找到(您是否缺少使用指令或程序集參考?) 您可能知道爲什麼會發生這種情況? 謝謝 – DarkJoy