我有一个可枚举数组

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();    
}

有谁知道我该怎么做?

有帮助吗?

解决方案

总是有静态的假对象,但这个问题是关于 rhino-mocks 的,所以我向您展示我的方法。诀窍是您创建一个局部变量作为计数器,并在匿名委托/lambda 中使用它来跟踪您在数组中的位置。请注意,我没有处理 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());
}

其他提示

如果功能是 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();    
}

模拟存储库将按顺序应用期望。

有什么理由让你必须在这里进行模拟......
不然的话我就去上假课了..简单得多,我知道如何让它做到这一点:)我不知道模拟框架是否提供了这种自定义行为。

恕我直言,yield 会处理这个问题。关联.

就像是:

get_next() {
  foreach( float x in meas ) {
    yield x;
  }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top