2

列挙可能な配列があります

int meas[] = new double[] {3, 6, 9, 12, 15, 18};

テストしているモックのメソッドを連続して呼び出すたびに、その配列から値を返したいと思います。

using(_mocks.Record()) {
  Expect.Call(mocked_class.GetValue()).Return(meas); 
}
using(_mocks.Playback()) {
  foreach(var i in meas)
    Assert.AreEqual(i, mocked_class.GetValue();    
}

誰かが私がこれをどのように行うことができるか考えていますか?

4

4 に答える 4

4

常に静的なフェイク オブジェクトがありますが、この質問はライノ モックに関するものなので、その方法を紹介します。トリックは、カウンターとしてローカル変数を作成し、それを匿名のデリゲート/ラムダで使用して、配列のどこにいるかを追跡することです。GetValue() が 6 回以上呼び出されるケースを処理していないことに注意してください。

var meas = new int[] { 3, 6, 9, 12, 15, 18 };
using (mocks.Record())
{
    int forMockMethod = 0;
    SetupResult.For(mocked_class.GetValue()).Do(
        new Func<int>(() => meas[forMockMethod++])
        );
}

using(mocks.Playback())
{
    foreach (var i in meas)
        Assert.AreEqual(i, mocked_class.GetValue());
}
于 2008-09-16T07:08:48.243 に答える
1

機能がGetValue()が各配列要素を連続して返す場合は、複数の期待値を設定できるはずです。

using(_mocks.Record()) {
  Expect.Call(mocked_class.GetValue()).Return(3); 
  Expect.Call(mocked_class.GetValue()).Return(6); 
  Expect.Call(mocked_class.GetValue()).Return(9); 
  Expect.Call(mocked_class.GetValue()).Return(12); 
  Expect.Call(mocked_class.GetValue()).Return(15); 
  Expect.Call(mocked_class.GetValue()).Return(18); 
}
using(_mocks.Playback()) {
  foreach(var i in meas)
    Assert.AreEqual(i, mocked_class.GetValue();    
}

モックリポジトリは、期待値を順番に適用します。

于 2008-09-16T05:43:44.657 に答える
0

私見、yieldがこれを処理します。 リンク

何かのようなもの:

get_next() {
  foreach( float x in meas ) {
    yield x;
  }
}
于 2008-09-16T04:28:16.210 に答える
0

ここにモックが必要な理由...
そうでない場合は、偽のクラスに行きます。はるかに単純で、これを行う方法を知っています:)モックフレームワークがこの種のモックを提供するかどうかはわかりません。カスタム動作。

于 2008-09-16T04:39:09.197 に答える