2011-11-01 5 views
22

ApplyAppPathModifierが呼び出され、モックによって自動的に返されるように、HttpResponseBase.ApplyAppPathModifierをモックする必要があります。Moqでパラメータ値をパススルーすることはできますか?

I次のコードを持っている:

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

任意のアイデア?

編集:私は突然たくさんstupider感じるが、私は、これはあなたが書くときに何が起こるかだと思い

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

:部品番号のドキュメント(http://code.google.com/p/moq/wiki/QuickStart)の最初のページで解決策を見つけた

午前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); 
関連する問題