Dav*_*iff 4 .net unit-testing moq
我是Moq的新手,无法确定我如何订购设置.我有以下代码:
_orderRepository.Setup(r => r.Update(It.Is<Order>(a => ((int)a.OrderStatusReference.EntityKey.EntityKeyValues[0].Value) == 2)))
.Throws(exception)
.AtMost(5);
Run Code Online (Sandbox Code Playgroud)
我想要执行5次(如果更新失败,则重试逻辑).在第5次之后我想设置并期望它成功(不抛出异常):
_orderRepository.Setup(r => r.Update(It.Is<Order>(a => ((int)a.OrderStatusReference.EntityKey.EntityKeyValues[0].Value) == 2))).AtMostOnce();
Run Code Online (Sandbox Code Playgroud)
不幸的是,它继续使用第一个代码示例,并且从未成功更新.
如果我没有使用Throws方法,那么我可以使用Callback方法,但是在throw之后它不可用:(.
如果有办法或者这是Moq的限制吗?
And*_*mes 16
巴...有办法!
您可以使用队列返回返回值列表(策略在此处解释得非常好:http://haacked.com/archive/2009/09/29/moq-sequences.aspx).
以下是该博客的示例:
如果你想要这个工作(它没有):
reader.Setup(r => r.Read()).Returns(true);
reader.Setup(r => r.Read()).Returns(true);
reader.Setup(r => r.Read()).Returns(false);
Run Code Online (Sandbox Code Playgroud)
只需这样做:
Queue listOfOperations = new Queue<bool>(new bool[] { true, true, false });
reader.Setup(r => r.Read())
.Returns(() => listOfOperations.Dequeue());
Run Code Online (Sandbox Code Playgroud)
每次调用Read()时,都将使用Queue中的新值.
请享用!
归档时间: |
|
查看次数: |
2217 次 |
最近记录: |