题
我有一个可枚举数组
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();
}
模拟存储库将按顺序应用期望。
有什么理由让你必须在这里进行模拟......
不然的话我就去上假课了..简单得多,我知道如何让它做到这一点:)我不知道模拟框架是否提供了这种自定义行为。
不隶属于 StackOverflow