2011-11-01 3 views
22

ApplyAppPathModifier과 함께 호출되는 모의 방법으로 HttpResponseBase.ApplyAppPathModifier을 모의 할 필요가 있습니다.Moq에서 매개 변수 값을 통과시킬 수 있습니까?

나는 다음과 같은 코드가 있습니다

var httpResponseBase = new Mock<HttpResponseBase>(); 
httpResponseBase.Setup(hrb => hrb.ApplyAppPathModifier(/*capture this param*/)) 
       .Returns(/*return it here*/); 

어떤 아이디어?

편집 :

는 MOQ 문서의 첫 번째 페이지 (http://code.google.com/p/moq/wiki/QuickStart)에 대한 해결책을 찾을 수 : 갑자기 많은 멍청 느낌

var httpResponseBase = new Mock<HttpResponseBase>(); 
httpResponseBase.Setup(hrb => hrb.ApplyAppPathModifier(It.IsAny<string>) 
       .Returns((string value) => value); 

을,하지만이 당신이 쓸 때 발생하는 것 같다 23:30 코드

+1

하려면

httpResponseBase.Setup(x => x.ApplyAppPathModifier(It.IsAny<string>())) .Returns((string path) => path); 

당신은 또한 그것을 캡처 할 수있는 방법에 전달 된 인수를 반향 수 있습니다 예외 인수. 나는'Return()'대신에'Callback()'메소드를 사용했다. 후손과 완성을 위해서. – gregsdennis

+0

@gregsdennis 좋아요! 게시 해 주셔서 감사합니다. 전에 주목받지 못한'Callback()'이있다. 아마도 최근에 소개 된 것 같다. –

답변

9

사용 It :

It.Is<MyClass>(mc=>mc == myValue) 

여기에서 예상되는 기대 가치를 확인할 수 있습니다. 반환에 대해서는 필요한 값을 반환하십시오.

var tempS = string.Empty; 
var httpResponseBase = new Mock<HttpResponseBase>(); 
httpResponseBase.Setup(hrb => hrb.ApplyAppPathModifier(It.Is<String>(s=>{ 
      tempS = s; 
      return s == "value I expect"; 
      }))) 
       .Returns(tempS); 
+0

감사합니다 @Aliostad. 솔루션 답을 찾은 것뿐입니다 (답변으로 표시). 이 솔루션은 실제로 Moq 설명서의 첫 번째 페이지에 있습니다. 나는 갑자기 훨씬 더 어리 석다 고 느낀다. 그러나 23시 30 분에 코드를 작성할 때 일어나는 일이라고 생각한다. –

23

예, 당신은 내가`에 전달 던질 필요가 있었다

string capturedModifier = null; 

httpResponseBase.Setup(x => x.ApplyAppPathModifier(It.IsAny<string>())) 
       .Callback((string path) => capturedModifier = path); 
관련 문제