据我了解,FakeItEasy 2中的有序断言是这样完成的(来自文档):
// Assert
A.CallTo(() => unitOfWorkFactory.BeginWork()).MustHaveHappened()
.Then(A.CallTo(() => usefulCollaborator.JustDoIt()).MustHaveHappened())
.Then(A.CallTo(() => unitOfWork.Dispose()).MustHaveHappened());
现在,假设我有一个集合,并且对于此集合中的每个项目,我想声明对伪造对象进行了调用。断言调用的最佳方法是以正确的顺序进行的?
我想出了这个,但并不是真的喜欢它:
IOrderableCallAssertion ioca = null;
foreach (var item in items.OrderBy(i => i.Id)
{
var itemUnderTest = item;
if (ioca == null)
{
ioca = A.CallTo(() => fakeObject.Handle(itemUnderTest, otherArgument)).MustHaveHappened(Repeated.Exactly.Once);
}
else
{
ioca = ioca.Then(A.CallTo(() => fakeObject.Handle(itemUnderTest, otherArgument)).MustHaveHappened(Repeated.Exactly.Once));
}
}
答案 0 :(得分:0)
看起来对我来说是正确的。当然,你可以内联itemUnderTest并在两个if分支之外拉MustHaveHappened。
你总是可以用方便的方法隐藏它。
另一种方法:使用Invokes在调用进入时捕获假货,然后将它们与列表进行比较。