2011-02-08 15 views
1

Rhino.Mocks V3.6で連続する呼び出しごとに異なる戻り値が必要な場合、メソッドに複数の期待値を設定する正しい方法はありますか?Rhino.Mocksのメソッドに複数の期待値を設定する

次のコードはV3.5で動作していましたが、V3.6では失敗しています。

public void Test() 
{ 
    var mocks = new MockRepository(); 

    var process = mocks.DynamicMock<IProcess>(); 
    Expect.Call(process.Run()).Return(1); 
    Expect.Call(process.Run()).Return(2); 

    mocks.ReplayAll(); 

    Assert.That(process.Run(), Is.EqualTo(1)); 
    Assert.That(process.Run(), Is.EqualTo(2)); 

    mocks.VerifyAll(); 
} 

public interface IProcess 
{ 
    int Run(); 
} 

答えて

0

これは正しい方法であれば、私はよく分からない - しかし、それは動作します:)

var queue = new Queue<int>(new [] {1, 2, 3}); 
var mockObject = MockRepository.GenerateMock<IdGenerator>(); 
mockObject.Expect(calc => calc.GetNext()) 
      .Do((Func<int>) queue.Dequeue); 

Console.Out.WriteLine(mockObject.GetNext()); // returns 1 
Console.Out.WriteLine(mockObject.GetNext()); // returns 2 
Console.Out.WriteLine(mockObject.GetNext()); // returns 3 

私はこれを必要と最後の時間は、私が(部品番号用が)an extension methodを作成しました。私はRhino.Mocksフォーラムに掲載交差

_mockClock.Setup(clock => clock.GetCurrentTime()) 
      .ReturnsNextValueFrom(transitionTimestamps); 
+2

ここで答えを得ていない後...私のためにかなりうまくいったし、それは私が3.5より古いを復元するために、 '.Repeat.Onceを()'追加する必要が判明動作。しかし、アイデアをありがとう! –

+0

私の実際の解決策であなたの答えを自由に更新してください(他の人のために)。私はそれを受け入れます。 –

+0

@Nathan - 私はRepeat.Anceトリックを認識していません。それのために信用を取ることは間違っているでしょう。答えとしてフォーラムからの回答をコピーして貼り付けてください。それを受け入れてください(あなた自身でそれを理解した場合は、自分の質問に答えるのは間違いありません) – Gishu

関連する問題