Pitfall in FakeItEasy

The current project I’m doing is a CQRS based project, using the ncqrs framework. Today I came to a phase I needed some mocking done for some of my domain services. I choose FakeItEasy to handle this for me. So I started by just adding a reference to my DomainScenario project using a Nuget package.

For some of my complexer scenario’s I ran into some issues which took me about about 45 minutes to fix one of my tests. For fixing all other failing tests I had to do the same trick.

Before I explain the issue I ran into with FakeItEasy, I have to mention I use my aggregate roots to prepare my eventstore. My issue is related to this specific way of preparing the eventstore.

For example I have a Participant aggregate root like below.

As you can see both the edit and the construction of this aggregate use the same domain service to validate if the participant number is unique. Keep this in mind because of my eventstore preparation style, because this relates to the problem.

For my eventstore I use some fluent builder thing I built, which uses the domainobjects to generate the actual events.

This builder is used like below in my tests. Notice the GetChanges method is a extension method on my aggregateRoots.

For the test I want to do I registered my Fakes in first instance like below, which made my test fail. I am trying to test if the editing causes an ‘FormattedParticipantNrShouldBeUniqueException’ when changing the participantNr into an already excisting participantNr.

After 45 minutes searching and discussing with my colleague, we found a solution.

As you can see the solution was really simple, but hard to find, because debugging didn’t highlighted this was the issue.

Just switch the order of configuring the Mocked/Faked object.

Last but not least I show you my actual testmethod.

I’m not sure if I was just doing it wrong or if FakeItEasy just needs a fix to prevent you running into this issue. Hope I made the issue clear and it will save you some time when encountering some same issues.

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">