2016-09-21 1 views
1

Comme je comprends, a ordonné des affirmations dans FakeItEasy 2 sont faites comme ça (des docs):OrderedAssertions boucle Howto dans FakeItEasy 2

// Assert 
A.CallTo(() => unitOfWorkFactory.BeginWork()).MustHaveHappened() 
    .Then(A.CallTo(() => usefulCollaborator.JustDoIt()).MustHaveHappened()) 
    .Then(A.CallTo(() => unitOfWork.Dispose()).MustHaveHappened()); 

Maintenant, supposons que j'ai une collection et pour chaque élément dans cette collection I vouloir affirmer qu'un appel a été fait à un objet falsifié. Quelle est la meilleure approche pour affirmer que les appels ont été faits dans le bon ordre?

je suis venu avec, mais ne sont pas vraiment comme ça:

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)); 
     } 
    } 

Répondre

0

Cela semble à peu près juste pour moi. Bien sûr, vous pouvez ajouter itemUnderTest et tirer MustHaveHappened en dehors des deux si branches.

Et vous pourriez toujours cacher cela dans une méthode pratique.

Une alternative: utilisez Invokes pour capturer les faux lorsque les appels arrivent et les comparer par la suite à une liste.