2011-11-08 4 views
11

MOQ를 사용하여 메소드 호출을 예상 리턴리스트와 함께 조롱합니다. 내 메서드는 목록을 반환하지만 모의 메서드를 호출 할 때마다 새로운 목록을 만들길 원합니다. 내가 지금까지했던 어떤 : 나는 달성하기 위해 노력하고있어Moock을 사용하여 메소드가 호출 될 때마다 Mock이 새리스트를 리턴하는 방법

List<Correlation> expected = new List<Correlation> { new Correlation() { Code = "SelfError1" }, new Correlation() { Code = "SelfError2" } }; 
Mock<IRPLValidator> selfMock = new Mock<IRPLValidator>(); 
selfMock.Setup(f => f.Validate()).Returns(expected); 

는 모의 리턴 새 목록 메소드 GET 호출의 때마다 확인하는 것입니다. 나는이 시도했지만 작동하지 않았다 :

이 일을하지 않았다으로
selfMock.Setup(f => f.Validate()).Returns(new List<Correlation>{ new Correlation() { Code = "SelfError1" }, new Correlation() { Code = "SelfError2" } }); 

, 내가 생각하고 어쩌면 콜백 내 질문에 대한 대답하지만 난 내 목록을 다시 초기화에 대한 적절한 예를 찾을 수 없습니다 . 제안 사항이 있으십니까?

매번 새로운 목록이 필요한 이유는 궁금해 할 수 있습니다. 문제는 개체 유형에 따라 목록에서 일부 변경된 여러 개체 유형에 대해 메서드를 호출하고 있다는 것입니다. 모의 메서드는 메서드가 호출 될 때마다 동일한 목록을 제공하기 때문에 항상 메모리의 동일한 개체를 수정하므로 변경 한 내용을 추적 할 수 없습니다.

미리 감사드립니다.

답변

14
selfMock.Setup(f => f.Validate()).Returns(() => new List<Correlation>{ new Correlation() { Code = "SelfError1" }, new Correlation() { Code = "SelfError2" } }); 

반품 내의 값을 기능으로 변환해야합니다. 시도한 버전이 단일 목록을 만든 다음 사용 된 버전을 반환합니다. 이 방법은 매번 반환 값이 필요할 때마다 함수를 호출하기 때문에 목록이 만들어집니다.

+0

매력처럼 작동했습니다! 많은, 많은 감사합니다. 너무 쉬웠다. –

+0

고마워요. 언젠가는이 클로저의 모든 것을 얻을 수 있습니다. – David

+0

위시 나는 어제 왜 내 목록이 업데이트되지 않았는지 궁금해 한 일찍 이것을 낭비했다. 감사!!! – PmanAce

2

Return은 입력 매개 변수로 Func <> (및 다양한 오버로드) 대리자를 사용하므로 매개 변수로 반환 될 반환 방법의 일부 데이터뿐만 아니라 실행될 함수와 결과도 지정할 수 있습니다. 함수가 반환됩니다. Rangoric에서 제공하는 솔루션은 귀하의 경우에 잘 작동합니다.

+0

설명 주셔서 감사합니다! –

관련 문제