Full disclosure I am an active contributor to NFluent.
Imagine your first days on a new project that has a decent unit tests base (if not, change this or walk away).
You start coding away a fix or new feature, you extend the test base, you happily commit! Then the factory signals a failed build due to failing tests.
Well, that’s expected actually, unit tests are here as a safety net.
Bu then you realize that the test error message does not help. Neither taking a look at the test code, as the assertion’s syntax does not properly reflect the test intents.
Or maybe the previous developer failed to realize that the expected value comes first in Assert.AreEqual, or the comment has not been updated.
In the end, you have to debug the test to understand what is going wrong.
This hassle fuels the naysayers that claim that unit tests are a cute idea but:
- do not provided added value to the product
- are expensive to write
- are a burden in maintenance
They are basically right. Of course this is a short-sighted vision, but those are actual issues with many code base as of now, with the notable exception of OSS.
This is a serious issue that needs to be addressed.
Part of the problem comes from the fact that unit test tools have not significantly changed in the past decade, a time when the main challenges were being able to implement test runners and build testing infrastructures. Then there was interest in building more efficient test runners with the integration of multiple scenario for a single test, or the generation of variants. But no significant effort regarding the API.
Coming back to my earlier example, we, TDD craftsmen, need an API that allows us to be expressive on the assertion/checks we make. We want the IDE to help us, typically through Intellisense, we want to be able to add our own tests, we want to express conjoined test criteria as a single check and we want to ensure that newcomers (including our proverbial ‘future self’) to understand clearly what the test is about.
nFluent has been designed to answer those requirements as well as some others. It is on OSS assertion library that works on top of all unit test frameworks (nUnit, mbUnit, xUnit, even MSTest). You can start using now on any existing code base or new project. It is available through nFluent and it is guided by the brilliant T.Pierrain (@Tpierrain).
Check it: http://n-fluent.net/