【发布时间】:2010-11-30 08:01:24
【问题描述】:
我对最小起订量相当陌生,无法弄清楚如何订购设置。我有以下代码:
_orderRepository.Setup(r => r.Update(It.Is<Order>(a => ((int)a.OrderStatusReference.EntityKey.EntityKeyValues[0].Value) == 2)))
.Throws(exception)
.AtMost(5);
我希望它被执行 5 次(如果更新失败,它的重试逻辑)。第 5 次后我想设置并期望它成功(不抛出异常):
_orderRepository.Setup(r => r.Update(It.Is<Order>(a => ((int)a.OrderStatusReference.EntityKey.EntityKeyValues[0].Value) == 2))).AtMostOnce();
不幸的是,它继续使用第一个代码示例,并且从未成功更新。
如果我没有使用 Throws 方法,那么我可以使用 Callback 方法,但是它在 throw 后不可用:(.
如果有办法或者这是起订量的限制吗?
【问题讨论】:
-
您使用的是什么版本的起订量?我的版本不允许我在 Setup() 之后指定 AtMost(5) 和 AtMostOnce()...
-
版本 3.1.0.0,奇怪的是它不允许你指定它们,你怎么会期望它只被调用 x 次!?也许旧版本使用不同的方法?
-
好的,我对此进行了深入研究。事实证明,AtMost 和 AtMostOnce 是隐藏的,如下所述:clariusconsulting.net/blogs/kzu/archive/2009/01/08/115183.aspx 这强烈地向我表明,这种定义方法被调用次数的方式即将淘汰。我可能错了,但 Verify 方法提供了 IntelliSense 可见的替代方法。
-
“AtMost 和 AtMostOnce 被隐藏”.. 从智能感知中隐藏?它对我来说不是隐藏的!你用的是什么版本?我希望它不会消失……Verify 方法需要额外的代码行,并且会使测试变得凌乱且难以阅读。我总是可以添加一个扩展来维护 AtMostOnce...感谢您的研究。
-
作为记录,我使用的是 3.1.something - 不记得确切的版本,但它比 3.1.0.0 高一点...
标签: .net unit-testing moq