使用 rhino 模拟为每个调用返回不同的实例

发布于 2024-10-14 11:40:53 字数 311 浏览 4 评论 0原文

我有这样的代码:

Expect.Call(factory.CreateOrder())
    .Return(new Order())
    .Repeat.Times(4);

当调用四次时,每次都会返回相同的实例。我想要返回差异实例。我希望能够做这样的事情:

Expect.Call(factory.CreateOrder())
    .Return(() => new Order())
    .Repeat.Times(4);

可以通过某种方式完成吗?

I've got this code:

Expect.Call(factory.CreateOrder())
    .Return(new Order())
    .Repeat.Times(4);

When this is called four times, every time the same instance is returned. I want difference instances to be returned. I would like to be able to do something like:

Expect.Call(factory.CreateOrder())
    .Return(() => new Order())
    .Repeat.Times(4);

Can this be done in some way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

送舟行 2024-10-21 11:40:53

而不是使用

.Return(new Order());

Try using

.Do((Func<Order>)delegate() { return new Order(); });

This 将每次调用委托,创建一个新对象。

Instead of using

.Return(new Order());

Try using

.Do((Func<Order>)delegate() { return new Order(); });

This will call the delegate each time, creating a new object.

涙—继续流 2024-10-21 11:40:53

通过每次指定不同的返回值,重复您期望的 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());

Repeat 4 times your expectation by specifying a different return value each time (notice the Repeat.Once())

for (int i = 0; i < 4; i++)
   Expect.Call(factory.CreateOrder()).Repeat.Once().Return(new Order());

UPDATE: I believe the following will work as well:

Expect.Call(factory.CreateOrder())
  .Repeat.Once().Return(new Order())
  .Repeat.Once().Return(new Order())
  .Repeat.Once().Return(new Order())
  .Repeat.Once().Return(new Order());
听闻余生 2024-10-21 11:40:53

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

请参阅他的博客文章了解更多详细信息。

Patrick Steele suggested this extenstion method:

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 for more details.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文