2013-07-29 1 views
0

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> '

답변

0

우선 moq에는 moq 인터페이스 메소드 또는 가상 메소드가 필요합니다. 먼저 인터페이스 또는 가상 메소드를 수행해야합니다. 정적 방법은 나의 방법은 정적 아니라, 당신의 방법은 정적이 아닌 경우 다음 당신은

mock.Mock<Helpers>().Setup(r => r.DistinctBy(It.IsAny<IEnumerable<TSource>>(), It.IsAny<Func<TSource, TKey>>())).Returns(ieList); 
+0

그것에 대해 죄송 입증 할 필요가없는 않습니다

편집을 할

mockable 없습니다. 코드를 업데이트했습니다. 또한 IHelpers 클래스에는이 메서드에 대한 인터페이스가 포함되어 있으므로 메서드의 인터페이스를 조롱하고 있습니다. – DarkJoy

+0

나는 이미 이와 비슷한 것을 시도했다. 오류의 접근을 반환 커플 : 이 --- 오류 \t 7 방법에 대한 형식 인수가 .... 사용에서 유추 할 수 없습니다. 형식 인수를 명시 적으로 지정하십시오. --- 오류 \t 8 형식 또는 네임 스페이스 이름 'TSource이'을 (를) 찾을 수 없습니다 (당신은 using 지시문 또는 어셈블리 참조가?) \t --- 형식 또는 네임 스페이스 이름 'TKEY'오류 \t (10) 찾을 수 없습니다 (사용 지시문이나 어셈블리 참조가 누락 되었습니까?) 왜 이런 일이 벌어지고 있는지 알 수 있습니까? 감사합니다. – DarkJoy

관련 문제