this DistinctBy 메서드를 사용하여 그 차이를 확장자로 사용하지 않았습니다. 이제는이 메서드를 호출하는 다른 메서드에 대한 단위 테스트를 작성하여 반환을 설정하려고합니다.Moq를 사용하여 IEnumerable 입력 매개 변수로 메소드 모의/설정 방법?
은 "DistinctBy"Metod
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();
하지만 작동하지 않습니다.
에 가장 적합한 오버로드 된 메서드에 일치 .... 일부 불법 인수, 및/또는 인수가 하나가있다 : 에 'System.Collections.Generic.List'에서 변환 할 수 없습니다 '시스템이 같은 오류를 표시하는 것 .Collections.Generic.IEnumerable> '
그것에 대해 죄송 입증 할 필요가없는 않습니다
편집을 할mockable 없습니다. 코드를 업데이트했습니다. 또한 IHelpers 클래스에는이 메서드에 대한 인터페이스가 포함되어 있으므로 메서드의 인터페이스를 조롱하고 있습니다. – DarkJoy
나는 이미 이와 비슷한 것을 시도했다. 오류의 접근을 반환 커플 : 이 --- 오류 \t 7 방법에 대한 형식 인수가 .... 사용에서 유추 할 수 없습니다. 형식 인수를 명시 적으로 지정하십시오. --- 오류 \t 8 형식 또는 네임 스페이스 이름 'TSource이'을 (를) 찾을 수 없습니다 (당신은 using 지시문 또는 어셈블리 참조가?) \t --- 형식 또는 네임 스페이스 이름 'TKEY'오류 \t (10) 찾을 수 없습니다 (사용 지시문이나 어셈블리 참조가 누락 되었습니까?) 왜 이런 일이 벌어지고 있는지 알 수 있습니까? 감사합니다. – DarkJoy