我有一个Enumerable数组
int meas[] = new double[] {3, 6, 9, 12, 15, 18};
在我正在测试的mock方法的每次连续调用中,我想从该数组返回一个值。
using(_mocks.Record()) {
Expect.Call(mocked_class.GetValue()).Return(meas);
}
using(_mocks.Playback()) {
foreach(var i in meas)
Assert.AreEqual(i, mocked_class.GetValue();
}
有没有人知道我该怎么做?
答案 0 :(得分:4)
总是有静电假物体,但这个问题是关于犀牛嘲笑的,所以我按照我的方式向你展示。 诀窍是你创建一个局部变量作为计数器,并在你的匿名委托/ 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());
}
答案 1 :(得分: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();
}
模拟存储库将按顺序应用期望。
答案 2 :(得分:0)
答案 3 :(得分:0)
你必须在这里有一个模拟的任何理由...
如果没有,我会去一个假班..更简单,我知道如何做到这一点:)
我不知道模拟框架是否提供这种自定义行为。