2011-10-28 2 views
4

나는이 문제에 대한 해결책을 찾고자했지만 잘못된 검색어로 보았거나 단순히 내 질문에 대한 답변이 아닙니다.Moles를 사용하여 C#의 메서드 호출을 여러 번 다른 값으로 반환하려면 어떻게해야합니까?

문제점 : 단위 테스트를 작성하는 방법이 있습니다. 이 방법에는 실제로 해결할 수없는 외부 의존성이 있으므로 Moles를 사용하여 단위 테스트를 만들어야합니다.

이 외부 종속성은 여러 번 호출되는 인스턴스의 메서드와 두 번째로 Moles를 사용하여 다른 값을 반환하려는 메서드로 구성됩니다.

... 
bool myVar = SomeInstance.SomeMethod(); // Here I'd like to return true 
if(myVar) 
... 
... 
bool myOtherVar = SomeInstance.SomeMethod(); // Here I'd like to return false 
... 

지금 일반적으로 나는

MSomeInstance.SomeMethod.AllInstances.SomeMethod = @this => true; 

처럼 설정하지만 어떻게 둘 다 통화에 대한 다른 동작을 할 수 있습니까? 위의 "false"가 반환 된 다음 줄에 다른 줄을 쓰면 첫 번째 줄을 "덮어 씁니다". 그래서 항상 결과로 false가됩니다.

아이디어가 있으십니까?

답변

2

이 조금 추한하지만, 가능 :

var toggle = false; 
MSomeInstance.SomeMethod.AllInstances.SomeMethod = 
    @this => { toggle = !toggle; return toggle; }; 

첫 번째 호출은, 두 번째는 false를 true를 돌려줍니다.

+0

일반적으로 작업이 완료됩니다. 인덱스와 IEnumerable을 결합하여 후속 호출이 순서대로 연속 된 항목을 반환하도록 할 수 있습니다. –

+0

감사합니다. 그런 솔루션을 생각하지 않았습니다. 다행스럽게도 (특별한 경우입니다) :-) – Gorgsenegger