如何在 FakeItEasy 2 中循环有序断言
Howto loop OrderedAssertions in FakeItEasy 2
据我了解,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));
}
}
我觉得差不多。当然,您可以内联 itemUnderTest 并将 MustHaveHappened 拉到两个 if 分支之外。
而且您始终可以将其隐藏在一个方便的方法中。
另一种方法:使用 Invokes 在呼叫进入时捕获虚假信息,然后将它们与列表进行比较。
据我了解,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));
}
}
我觉得差不多。当然,您可以内联 itemUnderTest 并将 MustHaveHappened 拉到两个 if 分支之外。
而且您始终可以将其隐藏在一个方便的方法中。
另一种方法:使用 Invokes 在呼叫进入时捕获虚假信息,然后将它们与列表进行比较。