如何在FakeItEasy 2中循环OrderedAssertions

时间:2016-09-21 09:30:34

标签: fakeiteasy

据我了解,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));
        }
    }

1 个答案:

答案 0 :(得分:0)

看起来对我来说是正确的。当然,你可以内联itemUnderTest并在两个if分支之外拉MustHaveHappened。

你总是可以用方便的方法隐藏它。

另一种方法:使用Invokes在调用进入时捕获假货,然后将它们与列表进行比较。