2011-01-08 10 views
5
public interface ICell 
     { 
      int Value{get;} 

      void IncrementValue(); 
     } 

このインターフェイスのスタブをRhinoMockで作成します。 私は読み取り専用のプロパティを持っています。私はIncrementValue()メソッドを呼び出すたびに値を増やしたいと思います。これは可能ですか?私はこのスタブに新しいクラスを作成したくありません。readOnlyプロパティの動作をスタブします。

答えて

3

私はJayと同様の提案をしています。これにはいくつかの欠点があるかどうかは不明です。

int count = 0; 

    var mock = MockRepository.GenerateStub<ICell>(); 
    mock.Stub(p => p.Value).WhenCalled(a => a.ReturnValue = count).Return(42); 
    mock.Stub(p => p.IncrementValue()).WhenCalled(a => { 
     count = (int)count+1; 
    }); 

リターン(42)は「捨てないで、値が何かを返す」と谷42のカウントの現在値とを返すWhenCalled(A => a.ReturnValue =カウント)オーバーライド言うことそこに置かれています。

0

関数getが呼び出されたときにrhinoモックをラムダに実行させることができます。このラムダは、カウンタをインクリメントすることができます。あなたは例を見つけることができますhere

+0

よりも優れていると思うあなたの助け前

cell.Stub(c => c.Value).WhenCalled(m => m.ReturnValue = cell.GetArgumentsForCallsMadeOn(c => c.IncrementValue()).Count).Return(0); 

何を増やすべきか...インターフェースにはget-property、setがありません –

0

私もこれを思い付いた:私はWhenCalledメソッドの動作と混乱していた...しかし、私はあなたのアプローチは、私がマーティンの問題を推測し、この1

関連する問題