我有这段代码:
Expect.Call(factory.CreateOrder())
.Return(new Order())
.Repeat.Times(4);
每次调用此类实例四次时,每次返回相同的实例。我希望返回差异实例。我希望能够做到这样的事情:
Expect.Call(factory.CreateOrder())
.Return(() => new Order())
.Repeat.Times(4);
这可以通过某种方式完成吗?
答案 0 :(得分:14)
而不是使用
.Return(new Order());
尝试使用
.Do((Func<Order>)delegate() { return new Order(); });
这将每次调用委托,创建一个新对象。
答案 1 :(得分:2)
每次指定不同的返回值,重复4次预期(注意Repeat.Once()
)
for (int i = 0; i < 4; i++)
Expect.Call(factory.CreateOrder()).Repeat.Once().Return(new Order());
更新:我相信以下内容也会有效:
Expect.Call(factory.CreateOrder())
.Repeat.Once().Return(new Order())
.Repeat.Once().Return(new Order())
.Repeat.Once().Return(new Order())
.Repeat.Once().Return(new Order());
答案 2 :(得分:2)
Patrick Steele建议使用此扩展方法:
public static IMethodOptions<T> Return<T>(this IMethodOptions<T> opts, Func<T> factory)
{
opts.Return(default(T));
opts.WhenCalled(mi => mi.ReturnValue = factory());
return opts;
}
See his blog entry了解详情。