2011-09-13 3 views
10

Moq이 내가 사용하고있는 다른 조롱 프레임 워크가 IMHO에 도전하고 있으므로 새 프로젝트에서 사용하고 싶은 것이 있는지 확인하려고합니다.초보자가 열거 형 메서드에 Moq를 사용하려고 시도했습니다.

IEnumerable<PickList> GetPickLists(); 

내가 ... 내가 해봤 같은 것을이 조롱하기로되어있어 방법을 잘 모르겠지만, (컴파일시 오류를 받고 있어요 : 그래서 예를 들면, I는 다음과 같은 방법을 나는 다음과 같은 반환() 정확하지 알고 있지만, 반환 본체에 넣어 무엇을 알아낼 수 없습니다 :

CustomerSyncResult ApplyActions(IEnumerable<CustomerAction> actions); 
IEnumerable<Customer> GetCustomers(IEnumerable<string> crmIDs, IEnumerable<string> emails); 
: 이러한 두 가지 방법 같은 것을 조롱하기 위해 노력하고, 또한

var mockCrm = new Mock<ICrmProvider>(); 
mockCrm.Setup<IEnumerable<PickList>>(foo => foo.GetPickLists()) 
       .Returns<IEnumerable<PickList>>({}); 

나는 내가 아는 것을 알고있다. g blanket 질문이지만, 나는 시작하기에 시간의 지옥을 가지고있다. 다운로드 CHM에 나와있는 샘플이 충분하지 않습니다. 튜토리얼 중 일부는 쓸모없는 메소드를 사용하는 것뿐만 아니라 열거를 다루지 않아서 까다로울 수 있습니다. (

모든 팁을 매우 높이 평가할 것입니다. .

답변

11

mockCrm.Setup(x => x.GetPickLists()) 
    .Returns(new List<PickList>()); 

QuickStart 좋은 참조가 시도 다른 방법에 대한

몇 가지 예 :.

mockCrm.Setup(x => x.ApplyActions(It.IsAny<IEnumerable>())) 
    .Returns(new CustomerSyncResult()); 

mockCrm.Setup(x => x.GetCustomers(It.IsAny<IEnumerable>(), 
            It.IsAny<IEnumerable>())) 
    .Returns(new List<Customers>()); 

제쳐두고 더 나은 형식 안전을 위해 원래 인터페이스에서 IEnumerable 제네릭을 만듭니다.

당신은 또한 새로운 MOQ V4 기능 사양을 사용할 수 있습니다뿐만 아니라 현재 문서화되어 있지 않습니다

var list = new List<PickList> { new PickList() }; 

ICrmProvider crm = 
    Mock.Of<ICrmProvider>(
     x => 
     x.GetPickLists() == list); 

. 더 이상 mock.Object을 쓸 필요가 없습니다. 일부 링크 :

정확한 구문 (It.Is를 사용하여, 목록 등의 내용이) 당신이 달성하려고하는지에 따라 달라집니다. It.IsAny은 모든 인수와 일치하므로 시퀀스 또는 컬렉션 매개 변수를 처리 할 때 더 쉽게 작업 할 수 있습니다.

+0

굉장 ... 고마워! 젤을 시작 ... –

+0

그것으로 붙어; 훌륭한 도서관입니다. 원하는 경우 DLL을 [LINQPad] (http://www.linqpad.net/)로 가져 와서 조롱 유형으로 재생할 수 있습니다. – TrueWill

+0

추가 질문 ... 당신이 조롱하고있는 객체가 생성자의 매개 변수를 필요로한다면? 예를 들면 다음과 같습니다. public CustomerSyncEngine (ILoggingProvider loggingProvider, ICrmProvider crmProvider, ICacheProvider cacheProvider) 거기에 생성자의 매개 변수를 어떻게 가져 옵니까? –

관련 문제