Moq First() Last() 和 GetEnumerator() 怪异

发布于 2024-11-24 03:38:12 字数 676 浏览 2 评论 0原文

我是莫清,我的路线部分来自 我的路线的rps = new List... (3 Route Parts)

Moqing GetEnumerator() 如下

route.Setup( ro => ro.GetEnumerator()).Returns(rps.GetEnumerator());

Moq 在以下代码中失败,并在调用时显示“序列不包含元素” Last()

o.Route.Any(rp => rp.IsNonTowLocation && 
rp != o.Route.First() && 
rp != o.Route.Last())

在直接窗口中查看 First() Last(),我发现如果执行 First(),值就会发生变化 Last() 多次。就好像 MoveNext() 被调用,但 Reset() 没有被调用,而 Enumerable 完全混淆了。有没有人在 Moq 中遇到过这种情况并找到了解决方案?

I am Moqing my Route Parts from a
rps = new List... (3 Route Parts)

and Moqing GetEnumerator() for my Route as below

route.Setup(ro => ro.GetEnumerator()).Returns(rps.GetEnumerator());

but the Moq fails in the following code with "Sequence contains no elements" on the call to Last()

o.Route.Any(rp => rp.IsNonTowLocation && 
rp != o.Route.First() && 
rp != o.Route.Last())

Looking at First() Last() in the immediate windows I find the values change if I execute First() Last() multiple times. Its as if the MoveNext() gets called but not Reset() and the Enumerable it totally confused. Has anyone experienced this with Moq and found a solution?

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

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

发布评论

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

评论(1

無處可尋 2024-12-01 03:38:12

您已经设置了 GetEnumerator,以便它每次都返回相同的枚举器实例。

route.Setup(ro => ro.GetEnumerator()).Returns(rps.GetEnumerator());

这相当于:

var enumerator = rps.GetEnumerator()
route.Setup(ro => ro.GetEnumerator()).Returns(enumerator);

如果你想在每次调用时使用一个新的枚举器,那么你需要传递返回一个 lambda 表达式:

route.Setup(ro => ro.GetEnumerator()).Returns(() => rps.GetEnumerator());

每次调用 GetEnumerator() 时都会调用 lambda - 所以 First() 和然后 Last() 应该按预期工作。

You've setup your GetEnumerator so that it returns the same enumerator instance every time.

route.Setup(ro => ro.GetEnumerator()).Returns(rps.GetEnumerator());

This is equivalent to:

var enumerator = rps.GetEnumerator()
route.Setup(ro => ro.GetEnumerator()).Returns(enumerator);

If you want a new enumerator on every call, then you need to pass Returns a lambda expression:

route.Setup(ro => ro.GetEnumerator()).Returns(() => rps.GetEnumerator());

The lambda will get called every time GetEnumerator() is called - so First() and Last() should then work as expected.

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